先来介绍一下MTV:
大多数人在接触Django之后才听说MTV的,那么就用熟悉的MVC作解释。
也不知道什么是MVC?如下:
M--Model 代表数据存取层;
V--View 代表的是系统中选择显示什么和怎么显示的部分(包括模板和视图);
C--Controller 指的是系统中根据用户输入并视需要访问模型,以决定使用哪个视图的那部分。
下面可以说MTV了:
M --模型(Model),数据存取层。 该层处理与数据相关的所有事务: 如何存取、如何验证有效(和MVC中的M一样)。
T --模板(Template),即表现层。 该层处理与表现相关的决定: 如何在页面或其他类型文档中进行显示(相当于MVC中的V中的一部分,即:控制数据如何展现)。
V --视图(View),即业务逻辑层。 该层包含存取模型及调取恰当模板的相关逻辑。 你可以把它看作模型与模板之间的桥梁(MVC中V的另一部分,即:怎样描述要展现的数据;换句话讲就是,现在数据(结果)有了,你可以选择用哪一个HTML文件(方法)去展示(解释))。
好的,介绍完了。
会不会觉得MTV中漏掉了controller呢?这就是Django的特殊之处,它使用urls.py做url和view方法之间的控制器。
完整的逻辑:
一、在浏览器输入url之后,Django会去跟项目根目录下的urls.py中的每一个url正则表达式进行匹配,并且会跳转到第一个匹配到的url表达式后的方法(如果你有url重定向的话,会进行下一次匹配。或于去项目下其他APP中的urls.py中进行匹配)。
二、这里有一个分支:
分支(1)、由于我在项目中引用现成的数据库,所以都会在views.py中进行一些数据处理,如果需要对数据库进行操作,会在跳转到models.py.取完数据后再return给view。那么url跳转的方法就是views.py中定义的某个方法,处理完所需数据后return给某个html文件。
分支(2)、如果你用很传统的Django方式,数据库是在models.py中定义的。那你就用Django查询数据的方法,用起来也很方便,只是我现在工作中都用的第一个套路。完了return给某个html文件就好啦。(很久没这样用了,可能说的很笼统)
就这样,这里主要是逻辑问题。如果有什么指导或问题,欢迎讨论。