Django 应该这么学,才算“规范”
本文并不是教学文档,也不是课程推广。
是技术部在经历过项目延期、代码返工、人员交接混乱之后,整理出的一套 Django 学习与使用共识。
如果你学 Django 的过程中,出现过以下情况:自己三个月后回来看代码,要对着 Git 记录才想得起来
一、技术部统一结论:Django 不是“能跑就行”
在最近一次 code review 中,技术部反复提到一句话:“Django 写得乱,不是水平问题,是逻辑问题。”
这些问题,几乎都出现在“自学 Django”的项目里。
二、项目结构:不是为了好看,是为了活得久
技术部内部统一推荐的 Django 项目骨架(精简版):project/├── manage.py├── project/│ ├── settings/│ │ ├── base.py│ │ ├── dev.py│ │ └── prod.py│ ├── urls.py│ └── wsgi.py├── apps/│ ├── user/│ ├── order/│ └── product/└── requirements.txt
三、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:不干脏活,只做调度
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})
五、ORM:最容易被低估,也最容易出事故
“不知道自己在 for 循环里查了多少次数据库。”
orders = Order.objects.all()for order in orders: print(order.user.username)
orders = Order.objects.select_related('user')
写在最后
技术部不是要求你一开始就写出“完美 Django”,