Django MTV和MVC的区别详解
在上一节《django是什么》中,我们对 django 的诞生以及 web 框架的概念有了基本的了解,本节我们介绍 django 的设计模式,也就是 mtv。
在 web 开发领域还有另外一个非常著名的设计模式——mvc,它和 mtv 又有什么区别呢?这也是本节关注的重点内容。
1. mvc设计模式
我们先对 mvc 设计模式进行介绍,它是 web 设计模式的经典之作,mtv 模式也是在它的基础上衍生而来。
mvc 是 model-view-controller 的缩写,其中每个单词都有其不同的含义:
- modle 代表数据存储层,是对数据表的定义和数据的增删改查;
- view 代表视图层,是系统前端显示部分,它负责显示什么和如何进行显示;
- controller 代表控制层,负责根据从 view 层输入的指令来检索 model 层的数据,并在该层编写代码产生结果并输出。
图1:mvc 设计模式示意图
mvc 设计模式的请求与响应过程描述如下:
- 用户通过浏览器向服务器发起 request 请求,controller 层接受请求后,同时向 model 层和 view 发送指令;
- mole 层根据指令与数据库交互并选择相应业务数据,然后将数据发送给 controller 层;
- view 层接收到 controller 的指令后,加载用户请求的页面,并将此页面发送给 controller 层;
- controller 层接收到 model 层和 view 层的数据后,将它们组织成响应格式发送给浏览器,浏览器通过解析后把页面展示出来。
mvc 的 3 层之间紧密相连,但又相互独立,每一层的修改都不会影响其它层,每一层都提供了各自独立的接口供其它层调用,mvc 的设计模式降低了代码之间的耦合性(即关联性),增加了模块的可重用性,这就是 mvc 的设计模式。
2. mtv设计模式
那么 django 的 mtv 又是怎么回事呢?下面讲解 django 的设计模式。
django 借鉴了经典的 mvc 模式,它也将交互的过程分为了 3 个层次,也就是 mtv 设计模式;
- model:数据存储层,处理所有数据相关的业务,和数据库进行交互,并提供数据的增删改查;
- template:模板层(也叫表现层)具体来处理页面的显示;
- view:业务逻辑层,处理具体的业务逻辑,它的作用是连通model 层和 template 。
图2:django mtv 设计模式示意图
我们按照 mvc 的设计模式对 mtv 进行分析,mtv 设计模式中,用 view 层取代了 controller 层的位置,用 template 层取代了原来 view 层的位置。
初次接触 django 的设计模式的人,可能会对 template 层产生疑问,其实 template 英文的含义就是“模板”的意思,你可以简单理解成,它是一个 html 页面 ,html 页面的渲染在视图层完成。
同样我们也对 mtv 设计模式的请求与响应过程进行描述:
- 用户通过浏览器对服务器发起 request 请求,服务器接收请求后,通过 view 的业务逻辑层进行分析,同时向 model 层和template 层发送指令;
- mole 层与数据库进行交互,将数据返回给 view 层;
- template 层接收到指令后,调用相应的模板,并返回给 view 层;
- view 层接收到模板与数据后,首先对模板进行渲染(即将相应的数据赋值给模板),然后组织成响应格式返回给浏览器,浏览器进行解析后并最终呈现给用户。
通过以上两种设计模式的比较, 我们可以得出 mtv 是 mvc 的一种细化,将原来 mvc 中的 v 层拿出来进行分离,视图的显示与如何显示交给 template 层,而 view 层更专注于实现业务逻辑。其实在 django 是有 controller 层的,只不过它由框架本身来实现,所以我们不用关心它。django 更关注于m、t 和 v。
到此这篇关于django mtv和mvc的区别详解的文章就介绍到这了,更多相关django mtv和mvc内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
推荐阅读
-
详解PHP中strlen和mb_strlen函数的区别
-
Falsk 与 Django 过滤器的使用与区别详解
-
对python中 math模块下 atan 和 atan2的区别详解
-
struts2配置文件详解(struts2和springMVC的区别)
-
laravel 配置路由 api和web定义的路由的区别详解
-
详解Java中的checked异常和unchecked异常区别
-
git用法教程图文详解(git fetch和git pull的区别)
-
对Python w和w+权限的区别详解
-
instanceof和typeof运算符的区别详解
-
MySQL中Decimal类型和Float Double的区别(详解)