为什么很多人学 Django 会懵?因为没搞懂 MVC 和 MTV 的真正区别
很多刚接触 Django 的开发者甚至包括不少测试工程师在学习 Django 时都会遇到一个困惑为什么 Django 不叫 MVC而是 MTV更奇怪的是很多教程还会说“Django 的 MTV 其实就是 MVC。”这句话听起来很像但其实差别非常关键。如果你理解了 MVC 和 MTV 的本质区别你会突然发现Django 的架构其实非常适合大型系统开发和自动化测试。今天我们就从软件工程和测试视角彻底讲清楚这件事。文章目录MVC 设计模式到底解决什么问题Django 为什么不用 MVCDjango 的 MTV 架构到底是什么MVC vs MTV 架构对比Django 模板层的核心作用Django 模板配置实战Django 加载模板的两种方式视图与模板的数据交互机制从测试视角理解 Django 架构1 MVC 设计模式到底解决什么问题在 Web 开发早期很多系统都存在一个问题代码全部混在一起。例如SQL 写在 HTML 里业务逻辑写在页面里数据处理写在控制器里系统一旦复杂维护几乎不可能。于是软件工程领域提出了一个经典架构MVCModel View Controller三层职责分离。MVC 架构示意请求流程1 用户发送请求 2 Controller 处理请求 3 Controller 调用 Model 获取数据 4 Controller 将数据传给 View 5 View 渲染页面 6 返回浏览器MVC 三层职责层职责Model数据层负责数据库操作View负责页面展示Controller负责业务逻辑和请求调度MVC 的核心思想只有一句话职责分离降低耦合2 Django 为什么不用 MVCDjango 的设计者在实践中发现一个问题在 Web 系统里Controller 经常非常臃肿。很多事情都写在 Controller业务逻辑数据查询页面渲染参数处理于是 Django 的设计者做了一件事把 View 拆成两个部分。一个负责数据一个负责展示于是 Django 提出了MTV 架构3 Django 的 MTV 架构到底是什么MTV Model Template View结构如下MTV 三层职责层作用Model数据层负责数据库交互View负责业务逻辑与数据处理Template负责 HTML 展示注意一个关键变化Controller 被弱化为 URL 路由系统。也就是 Django 的urls.py4 MVC vs MTV 架构对比MVCDjango MTVModelModelViewTemplateControllerView也就是说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修改 DIRSimport os TEMPLATES [ { DIRS: [os.path.join(BASE_DIR, templates)], } ]作用告诉 DjangoHTML 模板在哪。7 Django 加载模板的两种方式Django 提供两种加载模板的方法。方式一 loaderfrom 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接口测试TemplateUI测试测试策略可以这样拆例如Model 测试ORM 查询数据正确性View 测试API接口业务逻辑Template 测试页面渲染UI自动化这种架构级解耦会让自动化测试更容易落地。总结今天我们讲清楚了三件事1 MVC 是经典架构通过三层分离降低耦合。2 Django 的 MTV 是 MVC 的演化把展示逻辑进一步拆分。3 模板层是 Django 前端渲染核心负责动态 HTML 生成。从软件测试角度看MTV 结构还有一个巨大优势天然适合自动化测试。因为业务逻辑、数据层、展示层完全分离。这正是现代 Web 框架设计的核心思想。如果你是做测试开发 / 自动化测试 / AI测试工程师理解 Django 架构其实非常重要。因为很多企业内部的测试平台自动化平台AI测试助手底层其实都是Django 或 Flask 架构。理解框架结构测试才不会只是“点接口”。而是真正理解系统是怎么运行的。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2456396.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!