5.5 Django 一览:另一条全栈路


5.5 Django 一览:另一条全栈路

本节摘要:Flask 是积木,Django 是精装房——模型、后台、认证、表单开箱即用,代价是按它的规矩来。本节速览 Django 的核心概念:MTV 架构、模型即建表、自带管理后台、一键认证系统,并把轻记账在 Django 里的做法与 Flask 版逐项对照。见过两条路,你的框架选型才算见过全貌——这不是让你马上改换门庭,而是让你知道全家桶帮你省的是什么、收的是什么。

本节的能力清单

阅读完本节,你应当能够:

  1. 说出 MTV 三个字母的含义及与 Flask 组件的对应关系
  2. 定义 Django 模型并理解迁移机制的作用
  3. 描述 Django 自带管理后台与认证系统的价值
  4. 对照轻记账需求,给出"何时该换 Django"的判断

MTV:Django 的分工图

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 全部内置:用户模型现成、密码哈希用的是专业算法、登录登出是现成视图、还有"每请求一次自动附带当前用户"的约定。手搓一遍的价值在于懂原理,用全家桶的价值在于把时间花在业务上——两条路都值得走,区别只是阶段。

对照:轻记账在 Django 里的样子

环节 Flask 版(你手搓的) Django 版(开箱的)
路由 装饰器逐个登记 urls 配置统一声明
数据层 SQLAlchemy 手动会话 模型自动迁移
后台 需自建 自动生成
认证 5.4 手写 内置用户系统
表单校验 视图里手写 表单类声明式
学习曲线 平缓,概念少 陡峭,一套规矩

选型判断一句话版:轻记账这类小项目,Flask 的自由是甜的;一旦出现"内容管理、权限分级、运营后台"这类需求,Django 的全家桶开始回本。没有对错,只有匹配。

一个请求在 Django 里的旅程

把第 4 章学过的请求生命周期搬进 Django 走一遍,概念就对齐了:请求先经过中间件层(处理登录态、安全头等横切关注点,相当于你在 Flask 里手写的 before_request 钩子),再由 URL 配置把路径分发到视图;视图调用模型读写数据(ORM 会话由框架自动管理,不用你开合),最后渲染模板返回。你手搓过的每一环——路由表、会话读取、模板渲染——在这里都有官方组件对应,只是名字换了、配置位置固定了。

这套"约定优先"的设计有得有失。得:项目结构全局统一,换一个 Django 项目上手成本极低,因为文件位置和职责都是约定好的;安全默认值高——CSRF 防护、点击劫持防护、SQL 注入防护默认全开,6.6 节清单上的好几项它在框架层就替你勾了。失:灵活性下降,想绕开它的规矩(比如换掉 ORM)要费一番功夫;初期学习曲线陡,"还没写业务先学框架"劝退过不少人。理解这组取舍,比记住任何具体 API 都重要——它是你未来评估一切"全家桶"型工具(不限于 Python)的心智模板。

演练:十分钟摸一次 Django

不求精通,只求亲手建立印象:

pip install django django-admin startproject ledger_site cd ledger_site python manage.py runserver

浏览器打开开发服务器地址,看到火箭欢迎页即成功。再花五分钟:创建一个应用、写一个上面的 Record 模型、运行迁移命令,打开自动生成的前台首页与后台入口感受一下"全家"的意思。变式:把 5.4 的密码哈希要求在 Django 里找对应物——查文档确认它的用户模型怎么存密码,对比你手搓的盐加迭代方案。

易错点清单

  • 拿 Flask 的直觉硬套 Django:配置先行、约定优先,自由度换来的规矩要先读文档
  • 改了模型忘迁移:数据库结构与代码不同步,报错信息往往指鹿为马
  • 小项目硬上全家桶:配置成本超过业务本身,反过来也是一种错配
  • 以为两者互斥:概念是通用的,会 Flask 的人学 Django 只差一层约定

本节要点回顾

  • MTV 分工:模型管数据、模板管页面、视图管逻辑,与 Flask 组件一一对应
  • 迁移机制管表结构版本,Django 官方解法,项目一大必用
  • 后台与认证是全家桶的招牌:通用需求不重做
  • 选型看需求形态:轻自由、重全家,没有唯一正解
  • 概念可迁移:Flask 的每个手搓零件,都能在 Django 里找到官方对应物

两条路都看过了,轻记账继续走 Flask。第 6 章收官:前后端接通、部署上线、容器化、缓存异步与安全自检。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U