为什么很多人学 Django 会懵?因为没搞懂 MVC 和 MTV 的真正区别

举报
霍格沃兹测试开发学社 发表于 2026/03/30 14:51:50 2026/03/30
【摘要】 很多刚接触 Django 的开发者,甚至包括不少测试工程师,在学习 Django 时都会遇到一个困惑:为什么 Django 不叫 MVC,而是 MTV?更奇怪的是:很多教程还会说:“Django 的 MTV 其实就是 MVC。”这句话听起来很像,但其实 差别非常关键。如果你理解了 MVC 和 MTV 的本质区别,你会突然发现:Django 的架构其实非常适合大型系统开发和自动化测试。今天我们...
很多刚接触 Django 的开发者,甚至包括不少测试工程师,在学习 Django 时都会遇到一个困惑:

为什么 Django 不叫 MVC,而是 MTV?

更奇怪的是:

很多教程还会说:

“Django 的 MTV 其实就是 MVC。”

这句话听起来很像,但其实 差别非常关键

如果你理解了 MVC 和 MTV 的本质区别,你会突然发现:

Django 的架构其实非常适合大型系统开发和自动化测试。

今天我们就从软件工程和测试视角,彻底讲清楚这件事。


文章目录

  1. MVC 设计模式到底解决什么问题
  2. Django 为什么不用 MVC
  3. Django 的 MTV 架构到底是什么
  4. MVC vs MTV 架构对比
  5. Django 模板层的核心作用
  6. Django 模板配置实战
  7. Django 加载模板的两种方式
  8. 视图与模板的数据交互机制
  9. 从测试视角理解 Django 架构

1 MVC 设计模式到底解决什么问题

在 Web 开发早期,很多系统都存在一个问题:

代码全部混在一起。

例如:

  • SQL 写在 HTML 里
  • 业务逻辑写在页面里
  • 数据处理写在控制器里

系统一旦复杂,维护几乎不可能。

于是软件工程领域提出了一个经典架构:

MVC

Model
View
Controller

三层职责分离。


MVC 架构示意

请求流程:

1 用户发送请求 2 Controller 处理请求 3 Controller 调用 Model 获取数据 4 Controller 将数据传给 View 5 View 渲染页面 6 返回浏览器


MVC 三层职责

职责
Model
数据层,负责数据库操作
View
负责页面展示
Controller
负责业务逻辑和请求调度

MVC 的核心思想只有一句话:

职责分离,降低耦合


2 Django 为什么不用 MVC

Django 的设计者在实践中发现一个问题:

在 Web 系统里,

Controller 经常非常臃肿。

很多事情都写在 Controller:

  • 业务逻辑
  • 数据查询
  • 页面渲染
  • 参数处理

于是 Django 的设计者做了一件事:

把 View 拆成两个部分。

一个负责:

数据

一个负责:

展示

于是 Django 提出了:

MTV 架构


3 Django 的 MTV 架构到底是什么

MTV =

Model
Template
View

结构如下:



MTV 三层职责

作用
Model
数据层,负责数据库交互
View
负责业务逻辑与数据处理
Template
负责 HTML 展示

注意一个关键变化:

Controller 被弱化为 URL 路由系统。

也就是 Django 的:

urls.py

4 MVC vs MTV 架构对比

MVC
Django MTV
Model
Model
View
Template
Controller
View

也就是说:

Django 的 View ≈ Controller

而 Django 的 Template ≈ MVC 的 View

这也是很多人刚学 Django 会懵的原因。



5 Django 模板层的核心作用

在 Django 里:

模板本质就是 HTML 文件。

但它不是普通 HTML。

它支持:

  • 变量渲染
  • 条件判断
  • 循环
  • 模板继承

模板的核心作用是:

动态生成页面。


数据流示意





6 Django 模板配置实战

要使用模板,首先需要配置。

第一步 创建 templates 目录

项目结构:

project
 ├─ manage.py
 ├─ project
 │   ├─ settings.py
 │
 ├─ templates
     ├─ index.html

第二步 修改 settings.py

找到:

TEMPLATES

修改 DIRS:

import os

TEMPLATES = [
{
    'DIRS': [os.path.join(BASE_DIR, 'templates')],
}
]

作用:

告诉 Django

HTML 模板在哪。


7 Django 加载模板的两种方式

Django 提供两种加载模板的方法。


方式一 loader

from django.template import loader
from django.http import HttpResponse

def index(request):

    template = loader.get_template('index.html')

    html = template.render()

    return HttpResponse(html)

步骤:

1 获取模板 2 渲染模板 3 返回响应

代码稍微复杂。


方式二 render(推荐)

from django.shortcuts import render

def index(request):

    return render(request,'index.html')

一行解决。

Django 官方也推荐这种方式。


8 视图与模板的数据交互机制

很多人刚学 Django 最困惑的一件事:

Python 数据怎么传到 HTML?

答案是:

通过字典。


View 代码

def index(request):

    data = {
        "title""Django课程",
        "user""测试工程师"
    }

    return render(request,'index.html',data)

HTML 模板

<h1>{{ title }}</h1>

<p>{{ user }}</p>

模板变量使用:

{{ 变量名 }}

这样页面就能动态显示数据。


9 从测试视角理解 Django 架构

如果你是软件测试工程师,理解 MTV 其实非常重要。

因为它决定了:

系统的可测试性。

在 Django 中:

测试类型
Model
数据测试
View
接口测试
Template
UI测试

测试策略可以这样拆:


例如:

Model 测试:

  • ORM 查询
  • 数据正确性

View 测试:

  • API接口
  • 业务逻辑

Template 测试:

  • 页面渲染
  • UI自动化

这种 架构级解耦,会让自动化测试更容易落地。


总结

今天我们讲清楚了三件事:

1 MVC 是经典架构

通过三层分离降低耦合。

2 Django 的 MTV 是 MVC 的演化

把展示逻辑进一步拆分。

3 模板层是 Django 前端渲染核心

负责动态 HTML 生成。

从软件测试角度看,MTV 结构还有一个巨大优势:

天然适合自动化测试。

因为:

业务逻辑、数据层、展示层完全分离。

这正是现代 Web 框架设计的核心思想。


如果你是做 测试开发 / 自动化测试 / AI测试工程师,理解 Django 架构其实非常重要。

因为很多企业内部的:

  • 测试平台
  • 自动化平台
  • AI测试助手

底层其实都是 Django 或 Flask 架构。

理解框架结构,测试才不会只是“点接口”。

而是真正理解:

系统是怎么运行的。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。