本节摘要:Django 的架构是 MVT(Model-View-Template)。本节讲清三个核心组件的职责(Model 管数据、View 管逻辑、Template 管页面)、请求的处理流程,以及与 MVC 的对应关系。
阅读完本节,你应当能够:
"MVT 是什么?"——简单说:Model 管数据(表),View 管逻辑(怎么处理),Template 管显示(页面)。像餐厅的"食材(Model)+ 厨师(View)+ 摆盘(Template)"。请求来了,按"路由 → 视图 → 模型 → 模板"走一遍。

| 组件 | 文件 | 职责 |
|---|---|---|
| Model | models.py | 数据定义 |
| View | views.py | 处理逻辑 |
| Template | templates/ | 页面渲染 |
MVC:Model - View - Controller MVT:Model - Template - View(Django 把 Controller 归入 View)
💡 关键直觉:MVT 的 View ≈ MVC 的 Controller——Django 把"控制器"合并进视图函数,架构更简单。别被名字绕晕,看职责。
浏览器请求 → urls 路由 → view 函数 → 需要数据 → model 查库 → 需要页面 → template 渲染 → 返回响应
| 想做什么 | 写在 |
|---|---|
| 定义数据表 | models.py |
| 处理请求 | views.py |
| 配置地址 | urls.py |
| 写页面 | templates/ |
⚠️ 常见坑:逻辑写错位置。把数据库操作写在模板里、把页面逻辑写在模型里——按职责放代码,是 Django 的基本素养。
架构懂了,下一节写接口——URL 路由与视图。
Q1:MVT 和 MVC 到底差在哪?
MVC 是 Model(数据)-View(展示)-Controller(控制);MVT 是 Model(数据)-View(逻辑)-Template(展示)。关键差异:Django 把"控制逻辑"合并进了 View(视图函数/类),把"展示"单独拆成 Template(模板文件)。所以 MVT 的 View 大致对应 MVC 的 Controller,MVT 的 Template 大致对应 MVC 的 View。别被名字迷惑,看职责就清楚了。
Q2:一个请求在 MVT 里是怎么流动的?
流程是:浏览器请求 → 框架查 urls.py 找到匹配的路由 → 调用对应的视图函数 → 视图函数从 models 查询数据、把数据交给模板渲染(或直接返回 JSON)→ 返回响应给浏览器。这条链路里,urls 是"门牌号",view 是"处理中心",model 是"数据仓库",template 是"展示模板"。画一遍这个流程图,MVT 就活了。
Q3:视图(View)里到底该写什么、不该写什么?
该写:请求参数的读取、调用模型查询数据、组装返回的数据结构。不该写:数据库的具体操作(那是 Model 的活)、页面排版细节(那是 Template 的活)。简单原则:视图是"调度员",不是"劳动者"。它决定"需要什么数据、返回什么结果",但具体怎么查、怎么展示,交给对应的组件。遵守这条,代码才清晰可维护。
Q4:Django 的"约定"体现在哪些地方?
体现在"按目录放代码、按名字找文件":模型放 models.py、视图放 views.py、路由配置在 urls.py、页面模板放 templates 目录、后台注册放 admin.py。你不用声明"这个文件是模型",Django 默认去约定的位置找。这就是"约定优于配置"——遵守约定,配置量就极低;违反约定,框架找不到文件,报错自然找上门。
动手建议:在已经建好的应用里,实践一次"完整 MVT 流程":在 models.py 定义一个模型,在 views.py 写一个查询所有数据的视图,配置 urls.py 路由,启动后访问页面验证数据能返回。如果暂时不会写模板,先返回 JSON 也可以。重点不是功能多复杂,而是通过这次实践,把"路由—视图—模型"三个文件的协作方式刻进记忆。之后无论学多复杂的 Django 功能,底层都是这套流程的延伸。
本节练习的目标,是把"路由、视图、模型、模板"四个环节亲手串一遍。步骤如下:
第一步,定义一个模型。在应用目录的 models.py 里定义一个简单的类(比如一篇文章:标题、内容、发布日期)。验收标准:模型类代码存在,字段类型使用正确。
第二步,生成并执行迁移。先执行生成迁移命令,再执行迁移命令。验收标准:数据库里生成了对应的表,迁移命令无报错。
第三步,写一个视图。在 views.py 里写一个函数,它从数据库查询所有文章,把结果返回(可以先返回 JSON 格式,避免先接触模板)。验收标准:视图函数能读取到模型数据。
第四步,配置路由。在应用里建 urls.py(或使用项目的 urls.py),把某个路径映射到刚才的视图函数。验收标准:路由配置语法正确,路径清晰。
第五步,启动并访问。启动开发服务器,浏览器访问你配置的路径。验收标准:页面返回视图查到的数据——"路由、视图、模型"三个环节已经串通了。
第六步,补上模板。创建一个简单的模板文件,在视图里把数据渲染到模板,再访问一次。验收标准:页面展示的是渲染后的结果,不再是裸 JSON——至此 MVT 四环节全部走通。
六步走完,你亲手验证了 MVT 的完整协作方式。以后无论学多少 Django 的高级功能,底层都是这条"路由—视图—模型—模板"的流水线。
MVT 是 Django 的骨架:模型管数据、视图管逻辑、模板管展示、路由管入口。亲手把一条请求从路由走到模板,你就真正理解了 Django 是怎么把数据变成页面的。