本节摘要:Flask 是积木,Django 是精装房——模型、后台、认证、表单开箱即用,代价是按它的规矩来。本节速览 Django 的核心概念:MTV 架构、模型即建表、自带管理后台、一键认证系统,并把轻记账在 Django 里的做法与 Flask 版逐项对照。见过两条路,你的框架选型才算见过全貌——这不是让你马上改换门庭,而是让你知道全家桶帮你省的是什么、收的是什么。
阅读完本节,你应当能够:
Django 把应用拆成三件套:**模型(Model)**管数据与业务规则,**模板(Template)**管页面呈现,视图(View)管请求处理逻辑。名字与 Flask 对照着记:Django 的"模板"就是 Jinja2 模板,Django 的"视图"就是 Flask 的视图函数,Django 的"模型"对应你手搓的 SQLAlchemy 模型加手写的会话管理。差异不在概念,在打包程度:Flask 里三个概念各配各的库,Django 里官方配齐、互相咬合。
from django.db import models class Record(models.Model): item = models.CharField(max_length=100) amount = models.DecimalField(max_digits=10, decimal_places=2) date = models.DateField(default=timezone.now) owner = models.ForeignKey(User, on_delete=models.CASCADE)
语法与 SQLAlchemy 神似,但多了两个硬功夫。其一,金额字段用 Decimal 而非 Float——第一章 1.2 埋的浮点精度问题,全家桶在模型层就默认帮你避了。其二,迁移机制:模型改完,一条命令生成变更脚本、一条命令应用到数据库,表结构的变化像代码一样有版本、可回滚。5.2 提过"create_all 管增量不管变更"的坑,Django 官方给出了标准答案——项目一大,迁移的价值会指数级放大。
Django 的管理后台值得一提:把模型注册进配置文件,自动获得一个完整的网页后台——增删改查、搜索、过滤、权限、操作日志全都有。给运营同事开个数据维护入口?Flask 版要自己写页面,Django 版五分钟。这背后是它的设计哲学:通用需求不该每个项目重做一遍。
第 5.4 节手搓的注册、登录、会话、权限,Django 全部内置:用户模型现成、密码哈希用的是专业算法、登录登出是现成视图、还有"每请求一次自动附带当前用户"的约定。手搓一遍的价值在于懂原理,用全家桶的价值在于把时间花在业务上——两条路都值得走,区别只是阶段。
| 环节 | Flask 版(你手搓的) | Django 版(开箱的) |
|---|---|---|
| 路由 | 装饰器逐个登记 | urls 配置统一声明 |
| 数据层 | SQLAlchemy 手动会话 | 模型自动迁移 |
| 后台 | 需自建 | 自动生成 |
| 认证 | 5.4 手写 | 内置用户系统 |
| 表单校验 | 视图里手写 | 表单类声明式 |
| 学习曲线 | 平缓,概念少 | 陡峭,一套规矩 |
选型判断一句话版:轻记账这类小项目,Flask 的自由是甜的;一旦出现"内容管理、权限分级、运营后台"这类需求,Django 的全家桶开始回本。没有对错,只有匹配。
把第 4 章学过的请求生命周期搬进 Django 走一遍,概念就对齐了:请求先经过中间件层(处理登录态、安全头等横切关注点,相当于你在 Flask 里手写的 before_request 钩子),再由 URL 配置把路径分发到视图;视图调用模型读写数据(ORM 会话由框架自动管理,不用你开合),最后渲染模板返回。你手搓过的每一环——路由表、会话读取、模板渲染——在这里都有官方组件对应,只是名字换了、配置位置固定了。
这套"约定优先"的设计有得有失。得:项目结构全局统一,换一个 Django 项目上手成本极低,因为文件位置和职责都是约定好的;安全默认值高——CSRF 防护、点击劫持防护、SQL 注入防护默认全开,6.6 节清单上的好几项它在框架层就替你勾了。失:灵活性下降,想绕开它的规矩(比如换掉 ORM)要费一番功夫;初期学习曲线陡,"还没写业务先学框架"劝退过不少人。理解这组取舍,比记住任何具体 API 都重要——它是你未来评估一切"全家桶"型工具(不限于 Python)的心智模板。
不求精通,只求亲手建立印象:
pip install django django-admin startproject ledger_site cd ledger_site python manage.py runserver
浏览器打开开发服务器地址,看到火箭欢迎页即成功。再花五分钟:创建一个应用、写一个上面的 Record 模型、运行迁移命令,打开自动生成的前台首页与后台入口感受一下"全家"的意思。变式:把 5.4 的密码哈希要求在 Django 里找对应物——查文档确认它的用户模型怎么存密码,对比你手搓的盐加迭代方案。
两条路都看过了,轻记账继续走 Flask。第 6 章收官:前后端接通、部署上线、容器化、缓存异步与安全自检。