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

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

很多刚接触 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

ModelViewController

三层职责分离。


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 =

ModelTemplateView

结构如下:



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 osTEMPLATES = [{    'DIRS': [os.path.join(BASE_DIR, 'templates')],}]

作用:

告诉 Django

HTML 模板在哪。


7 Django 加载模板的两种方式

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


方式一 loader

from django.template import loaderfrom django.http import HttpResponsedef index(request):    template = loader.get_template('index.html')    html = template.render()    return HttpResponse(html)

步骤:

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

代码稍微复杂。


方式二 render(推荐)

from django.shortcuts import renderdef 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 模板

{{ title }}

{{ user }}

模板变量使用:

{{ 变量名 }}

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


9 从测试视角理解 Django 架构

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

因为它决定了:

系统的可测试性。

在 Django 中:

测试类型

Model

数据测试

View

接口测试

Template

UI测试

测试策略可以这样拆:


例如:

Model 测试:

  • ORM 查询
  • 数据正确性

View 测试:

  • API接口
  • 业务逻辑

Template 测试:

  • 页面渲染
  • UI自动化

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


总结

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

1 MVC 是经典架构

通过三层分离降低耦合。

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

2 Django 的 MTV 是 MVC 的演化

把展示逻辑进一步拆分。

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

负责动态 HTML 生成。

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

天然适合自动化测试。

因为:

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

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


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

因为很多企业内部的:

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

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

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

而是真正理解:

系统是怎么运行的。

文章版权声明:除非注明,否则均为边学边练网络文章,版权归原作者所有

相关阅读