导语:在最近的工作中,我接触了解了布道平台,参与了部分代码修改。在此期间,我学习了MVC和MTV,为了理解得更清楚,在此,我将这段时间对框架模式的学习整理下来。
一、MVC模式
首先说说web服务器开发领域里著名的MVC模式。所谓MVC就是把web应用分为,模型(M),控制器(C)和视图(V)三层,他们之间以一种插件式的、松耦合的方式连接在一起。模型负责业务对象与数据库的映射(ORM),视图负责与用户的交互(页面),控制器接受用户的输入,调用模型和视图完成用户的请求。
对M、V、C功能作用整理如下:
MVC模式工作流程如下:
综合看来,MVC模式的目的是实现一种动态的程式设计,使后续程式的修改和扩充操作简化,并且使程式的某一部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化,使程式结构更加直观:
1.使用MVC,开发人员可以将软件应用分为三个主要部分:模型、视图、控制器。这有助于提高可维护性,强制松耦合,并降低复杂性。
2.MVC允许对前端进行独立更改,而对后端逻辑无需任何修改或只需进行很少的更改,因此开发工作仍可以独立运行。
3.类似地,可以更改模型或业务逻辑,而无需对视图进行任何更改。
4.此外,可以更改控制器,而不会对视图或模型造成任何影响。
二、Django简介
Python的WEB框架有Django、Tornado、Flask 等多种,而Django相较于其他WEB框架其优势为:大而全,框架本身集成了ORM、模型绑定、模板引擎、缓存、Session等诸多功能。
布道平台使用的Django是一个开放源代码的Web应用框架。Django采用了MTV的设计模式,即模型M,模版T和视图控制器V。Django的MTV模式本质上和MVC是一样的,也是为了各组件间保持松耦合关系。
Django的优点:
1.开源框架,有完美的文档支持
2.解决方案众多,内部功能支持较多
3.优雅的URL,完整的路由系统
4.自助式的后台管理
三、Django的MTV模式
Django的MTV分别是:
M代表模型(Model):负责业务对象和数据库的关系映射(ORM)。
T代表模板(Template):负责如何把页面展示给用户(html)。
V代表视图(View):负责业务逻辑,并在适当时候调用Model和Template。
MTV的响应模式如下:
1,Web服务器(中间件)收到一个http请求
2,Django在URLconf里查找对应的视图(View)函数来处理http请求
3,视图函数调用相应的数据模型来存取数据、调用相应的模板向用户展示页面
4,视图函数处理结束后返回一个http的响应给Web服务器
5,Web服务器将响应发送给客户端
四、Django处理顺序
1、wsgi:socket请求处理
2、中间件:对请求做预处理或直接返回
3、urls.py:url匹配,通过映射列表将一个请求发送到一个合适的视图
4、views.py:向模型和模板发送(或获取)数据;
5、模型(Model)绑定:数据库存取数据
6、模板(Templates)引擎:用于将内容与展现分离,描述了数据如何展现(如网页模板)
7、模式渲染:将模板和数据整合,形成最终网页;
8、返回用户展示。
以下是网上找到处理流程比较完整的图,在此贴出以供学习:
五、MTV与MVC的比较
MVC中的View的目的是「呈现哪一个数据」,而MTV的View的目的是【数据如何呈现】。也就是把MVC中的View分成了视图(展现哪些数据)和模板(如何展现)2个部分,而Contorller这个要素由框架自己来实现,我们需要做的就是把(带正则表达式的)URL对应到视图就可以了,通过这样的URL配置,系统将一个请求发送到一个合适的视图。