
1.1.2 MTV设计原理
相信大多数的Web开发者对于MVC(Model、View、Controller)设计模式都不陌生,该设计模式已经成为Web框架中一种事实上的标准了,Django框架自然也是一个遵循MVC设计模式的框架。不过从严格意义上讲,Django框架采用了一种更为特殊的MTV设计模式,其中的“M”代表模型、“V”代表视图、“T”代表模板。MTV模式本质上也是基于MVC模式的,是从MVC模式变化而来的。
那么,MTV模式的具体内容是什么呢?下面,我们将MTV拆分开来逐一进行详细介绍。
(1)M模型(Model)表示的是数据存取层,处于MTV模式的底层。M模型负责处理与数据相关的所有事务,包括如何存取、如何验证有效性、如何处理数据之间关系等方面的内容。
(2)T模板(Template)表示的是表现层,处于MTV模式的顶层。T模板负责处理与表现相关的操作,包括如何在页面或其他类型文档中进行显示等方面的内容。
(3)V视图(View)表示的是业务逻辑层,处于MTV模式的中间层。V视图负责存取模型及调取适当模板的相关逻辑等方面的内容,是M模型与T模板之间进行沟通的桥梁。
此外,MTV模式还需要一个URL分发器,其作用是将URL页面请求分发给不同的V视图(View)去处理,然后V视图(View)再调用相应的M模型(Model)和T模板(Template)。其实仔细品味可以发现,这个URL分发器所实现的就是MVC模式下控制器(Controller)设计的功能。URL分发器的设计机制是使用正则表达式来匹配URL,然后再调用相应的Python函数方法。
任何一个Web前端设计模式,都离不开控制器(Controller)这个模块,其代表着业务处理的核心部分。我们在MTV模式中看不到控制器(Controller)的设计,并不是Django框架没有设计该模块,而恰恰是将该模块的功能封装在底层了。这样做的好处就是,将开发人员从烦琐的控制层逻辑中解脱出来,通过编写更少的代码来实现用户需求,而控制层逻辑交由Django框架底层自动完成,大大地提高了开发人员的开发效率。
MTV模式的响应原理如图1.2所示。

图1.2 MTV模式响应原理
T模板(Template)接收用户输入后交由V视图(View)去处理,V视图(View)负责连接M模型(Model)进行数据操作、并将操作返回的结果再传送给T模板(Template)进行展示。以上就是Django框架的MTV模式的基本工作原理。