当前位置:首页>python>技术部下达通知:Python Django 应该这么学才规范

技术部下达通知:Python Django 应该这么学才规范

  • 2026-10-21 13:28:39
技术部下达通知:Python Django 应该这么学才规范

Django 应该这么学,才算“规范”

本文并不是教学文档,也不是课程推广。

是技术部在经历过项目延期、代码返工、人员交接混乱之后,整理出的一套 Django 学习与使用共识。

如果你学 Django 的过程中,出现过以下情况:
项目一开始很顺,后期改一次炸一片
新人接手代码,只能从 views.py 开始硬啃
自己三个月后回来看代码,要对着 Git 记录才想得起来
那不是你不努力,是学习路径一开始就不规范。

一、技术部统一结论:Django 不是“能跑就行”

在最近一次 code review 中,技术部反复提到一句话:

“Django 写得乱,不是水平问题,是逻辑问题。”

典型“非规范 Django”项目特征:
一个 views.py 1500 行
settings.py 里全是 if else
所有业务判断写在视图函数里
ORM 查询能查出来就行,不管查了多少次
这些问题,几乎都出现在“自学 Django”的项目里。


二、项目结构:不是为了好看,是为了活得久

技术部内部统一推荐的 Django 项目骨架(精简版):
project/├── manage.py├── project/│   ├── settings/│   │   ├── base.py│   │   ├── dev.py│   │   └── prod.py│   ├── urls.py│   └── wsgi.py├── apps/│   ├── user/│   ├── order/│   └── product/└── requirements.txt
为什么 settings 一定要拆?
因为你迟早会遇到:
本地 DEBUG 要开
测试环境要打日志
线上环境不能有任何多余输出
如果你现在不拆,将来只能靠注释和祈祷。

三、Model:不是“表结构”,是业务中枢

技术部明确规定:

只把 Model 当数据库的人,Django 永远用不深。

一个更符合真实项目的 Model 写法class Order(models.Model):    STATUS_CHOICES = (        (0, '待支付'),        (1, '已支付'),        (2, '已取消'),    )    order_no = models.CharField(max_length=64, unique=True)    status = models.SmallIntegerField(choices=STATUS_CHOICES, default=0)    total_amount = models.DecimalField(max_digits=10, decimal_places=2)    created_at = models.DateTimeField(auto_now_add=True)    def is_paid(self):        return self.status == 1    def cancel(self):        if self.status != 0:            raise ValueError('当前订单状态不允许取消')        self.status = 2        self.save()
注意这里的几个点:
状态判断不写在 View
业务动作以方法形式存在
改规则,只改一个地方


四、View:不干脏活,只做调度

反面示例(技术部真实遇到过):
def create_order(request):校验参数    # 计算价格    # 创建订单    # 扣库存    # 写日志
这种代码,新人不敢动,老人不想动。
技术部推荐写法
def create_order(request):    user = request.user    data = request.POST    order = create_order_service(user, data)    return JsonResponse({'order_no': order.order_no})
所有业务逻辑放进 service 层。

五、ORM:最容易被低估,也最容易出事故

技术部点名最多的一类问题:

“不知道自己在 for 循环里查了多少次数据库。”

orders = Order.objects.all()for order in orders:    print(order.user.username)
一旦数据量上来,这段代码就是事故源头。
正确写法
orders = Order.objects.select_related('user')
不是高级技巧,是基本功。


写在最后

技术部不是要求你一开始就写出“完美 Django”,
而是希望你:
从结构上尊重项目
从习惯上尊重协作
从代码上尊重未来的自己

最新文章

随机文章