Django是典型的采用了MVT
设计模式的后端开发框架,而比MVT
更常见的一种设计模式叫做MVC
,为了更好地学习Django框架并加深对其理解,需要首先搞明白MVC
和MVT
二者的异同。
MVC
和MVT
都是一种后端开发框架的设计模式,这两种模式都可以实现使用框架开发项目时模块间的解耦,从而可以通过多人协同提高开发效率,二者最大的区别在于,在MVC
模式中开发者需要编写所有和控制相关的代码。
一、MVC设计模式简介
该设计模式将软件分成了三个主要组成模块:Model(模型)、View(视图)和Controller(控制器),每一个模块都有各自独立的职责,可以互不影响协同工作。关于三个模块,具体职责为:
名称 | 功能 |
---|---|
Model | 该模块负责与数据相关的逻辑,例如:查询、修改、保存数据至数据库等,该模块可视为数据访问层。 |
View | 该模块负责数据的展示,将数据从模型或用户处获取后进行展示。一般在使用遵循MVC 设计模式框架开发的web项目中,所有通过浏览器向用户展示的功能都由视图模块实现。 |
Controller | 该模块负责控制数据流向以及视图和模型之间的交互。例如:控制器会基于请求,经由模型协助从数据库中获取数据,进而通过视图将数据呈现给用户。 |
二、MVT设计模式简介
该设计模式也将软件分成了三个主要组成模块:Model(模型)、View(视图)和Template(模板),每一个模块的具体职责为:
名称 | 功能 |
---|---|
Model | 该模块和MVC 中模型部分功能一样,主要包含负责数据和数据库处理相关代码。 |
View | 该模块和MVC 中的视图功能相去甚远,主要用于执行业务逻辑,从模型处获取数据,将数据给到特定的模板进行渲染后向用户展示。 |
Template | 该模块可视为表示层,主要负责处理用户界面。该模块的文件主要是HTML 代码,用用于浏览器渲染数据。 |
三、MVC和MVT的异同
MVC
和MVT
两种模式的主要区别在于:在MVC
模式中,开发者需要编写所有和控制器相关的代码,但是在MVT
模式中,框架本身完成了控制器相关功能。
在经典的MVC
模式下,当用户通过浏览器发起一个请求后,将触发控制器中的一个功能调用,然后控制器要么告诉模型修改数据库并更新视图,要么基于模型返回一个更新后的视图。也就是说视图是由控制器和模型控制的。
然而,MVT
模式的处理逻辑稍有不同:当一个用户发起一次HTTP请求后,相关的视图将通过模型执行一次查询,进而获取查询的结果,最后视图将结果数据填进模板后发送给用户。
四、Django和MVT模式
最著名的Python后端框架Django就是采用了MVC
模式的典型代表。一般的后端应用都可以分为数据层、逻辑处理层以及布局层,在Django中:
- 模型负责数据层;
- 视图负责逻辑处理层;
- 模板负责布局层。
实际上,如果你仅熟悉遵循MVC
模式的后端框架,你基本上可以将Django所遵循的MVT
模式中的视图理解为MVC
中的控制器,模板理解为视图。
在Django中:
- 视图负责处理用户用该看到哪些数据而不是如何展示这些数据;
- 为了在将展示的效果和内容分开,因为需要模板;
- 控制器可理解就是框架本身,其负责根据Django的URL配置将请求发给适当的视图。
关于如何Django框架的M(模型)、V(视图)和T(模板)三个模块,请见下列两篇文章: