先看最常见的误区。
误区 1:把 project 和 app 混为一谈。
项目是整座行政区,app 是一个业务部门。这个边界不清,后面目录、职责、路由都会乱。
误区 2:把 View 写成万能窗口。
几百行 view 函数把权限、校验、查询、业务、响应全糊一起,是 Django 新手最常见失控点。
误区 3:把模板当脚本语言。
模板里做太多业务判断,会让展示层失去边界。公文排版室不要兼任审批科。
误区 4:把 Admin 当正式用户前台。
Admin 很强,但定位是内部办公楼。它能救你做后台,不等于它适合做产品首页。
误区 5:把 migration 当缓存。
迁移文件是规划变更记录,不是临时垃圾。删错历史 migration,经常会把团队环境和生产环境一起带沟里。
误区 6:不理解 ORM 惰性执行与 N+1。
页面能跑,不代表查得合理。列表页、详情页、关联对象访问,最容易藏性能坑。
误区 7:混淆 static 和 media。
这是文件管理里的老坑,出问题时往往不是样式丢失,而是上传内容管理混乱。
误区 8:自定义用户模型拖到项目中期再做。
这类改造成本通常比想象中高得多。
然后看 Django 特别适合什么项目。
- 后台管理密集型系统
- 内容管理系统
- 传统服务端渲染网站
- 需要快速交付的中后台产品
- 业务流程比较完整、希望“框架自带配套”的团队
- 希望一个 Python 单体项目先把大多数基础设施站稳的团队
你会发现,这些都很像“中央行政城区”的气质:
- 规章多
- 流程清
- 数据重
- 后台强
- 演进稳
再看不那么适合的场景。
- 极度轻量、只想要很薄 API 层的项目
- 从一开始就强前后端彻底分离,且 HTML 模板完全不是主战场的项目
- 对事件驱动、超高并发异步 I/O、实时连接模型有很强偏好的场景
- 团队非常抗拒约定、强烈偏好自己组装组件的场景
这不是说 Django 做不了,而是说:
如果你的目标不是“建一座设施完备的行政城区”,那 Django 的一整套行政配套反而可能显得厚。
最后用一句话收束:
Django 的真正价值,不在于它能帮你少写几行代码,而在于它给了你一套完整、稳定、可维护的城区治理结构。
当你的项目需要的正是一座“中央行政城区”,Django 往往会越用越顺手。
#官方来源链接清单
- https://www.djangoproject.com/download/
- https://docs.djangoproject.com/en/stable/intro/overview/
- https://docs.djangoproject.com/en/stable/intro/tutorial01/
- https://docs.djangoproject.com/en/stable/intro/tutorial02/
- https://docs.djangoproject.com/en/stable/intro/tutorial03/
- https://docs.djangoproject.com/en/stable/intro/tutorial04/
- https://docs.djangoproject.com/en/stable/intro/tutorial06/
- https://docs.djangoproject.com/en/stable/topics/http/urls/
- https://docs.djangoproject.com/en/stable/topics/http/views/
- https://docs.djangoproject.com/en/stable/topics/templates/
- https://docs.djangoproject.com/en/stable/topics/db/models/
- https://docs.djangoproject.com/en/stable/topics/db/queries/
- https://docs.djangoproject.com/en/stable/topics/migrations/
- https://docs.djangoproject.com/en/stable/ref/contrib/admin/
- https://docs.djangoproject.com/en/stable/topics/forms/
- https://docs.djangoproject.com/en/stable/topics/auth/
- https://docs.djangoproject.com/en/stable/howto/static-files/
- https://docs.djangoproject.com/en/stable/ref/request-response/
- https://docs.djangoproject.com/en/stable/topics/http/middleware/