深入淺析Django MTV模式
MVC模式
MVC, 全名Model View Controller, 是軟件工程中的一種軟件架構(gòu)模式,把軟件系統(tǒng)分為三個(gè)基本部分:模型(Model), 視圖(View)和控制器(Controller), 具有耦合性低,重用性高、生命周期成本低等優(yōu)點(diǎn)。

MVT模式
模型:數(shù)據(jù)存儲層,處理與數(shù)據(jù)相關(guān)的所有事務(wù),例如如何存取、如何驗(yàn)證有效性、包含哪些行為以及數(shù)據(jù)之間的關(guān)系等。負(fù)責(zé)業(yè)務(wù)對象與數(shù)據(jù)庫的對象(orm)。
模板:表現(xiàn)層,處理與表現(xiàn)相關(guān)的決定,例如如何在頁面或其他類型的文檔中進(jìn)行顯示。
Django作為Web框架,需要一種很便利的方法動態(tài)的生成HTML網(wǎng)頁,因此有了模板這個(gè)概念。模板包含所需HTML的部分代碼以及一些特殊的語法,特殊語法用于描述如何將視圖傳遞的數(shù)據(jù)動態(tài)插入HTML網(wǎng)頁中。
Django可以配置一個(gè)或多個(gè)模板引擎(甚至是0個(gè),如前后端分離,Django只提供API接口,無需使用模板引擎),模板引擎有Django模板語言(DTL)和Jinja2。Django模板語言是Django內(nèi)置的功能之一,Jinja2是當(dāng)前Python流行的模板語言。
視圖:業(yè)務(wù)邏輯層,存取模型及調(diào)取恰當(dāng)模板的相關(guān)邏輯,模型與模板的橋梁。主要負(fù)責(zé)處理用戶請求和生成相應(yīng)的相應(yīng)內(nèi)容,然后在頁面或其他類型文檔中顯示。也可以理解為視圖是MVC架構(gòu)里面的C部分(控制器),主要處理功能和業(yè)務(wù)上的邏輯。我們習(xí)慣使用視圖函數(shù)處理HTTP請求,記載視圖里定義def函數(shù),這種方式成為FBV(Function Base Views)。

(引自:https://zhuanlan.zhihu.com/p/362268440)
Django框架的基礎(chǔ)就是MTV模式, 將開發(fā)任務(wù)分為三大部分:
- Model:負(fù)責(zé)業(yè)務(wù)對象和數(shù)據(jù)庫的關(guān)系映射(ORM),與MVC模式中的Model是等同。
- Template:負(fù)責(zé)如何把頁面展示給用戶(HTML),這部分類似與MVC中的視圖。
- View:負(fù)責(zé)業(yè)務(wù)邏輯,并在適當(dāng)時(shí)候調(diào)用Model和Template。跟MVC中的Controller等同。

首先,我們要知道:MVT是什么?
昨天也提到了:
M全拼為Model,與MVC中的M功能相同,負(fù)責(zé)和數(shù)據(jù)庫交互,進(jìn)行數(shù)據(jù)處理。
V全拼為View,與MVC中的C功能相同,接收請求,進(jìn)行業(yè)務(wù)處理,返回應(yīng)答。
T全拼為Template,與MVC中的V功能相同,負(fù)責(zé)封裝構(gòu)造要返回的html。
MVT是一個(gè)前沿的軟件架構(gòu)模式,它具有高效的ORM(Object Relation Mapping)數(shù)據(jù)操作,將程序中的對象【object】和數(shù)據(jù)庫中的表【relation】建立關(guān)聯(lián)關(guān)系,關(guān)系【mapping】的過程稱為ORM.
為什么使用MVT結(jié)構(gòu)?
1.實(shí)現(xiàn)高內(nèi)聚低耦合易于開發(fā)
在實(shí)際開發(fā)過程中,需要根據(jù)不同的需求對原版本進(jìn)行迭代,MVT把對數(shù)據(jù)庫操作,請求處理和頁面布局進(jìn)行了分離,方便了對代碼的更新,不需要牽一發(fā)而動全身,易于代碼的維護(hù)。
2.提高開發(fā)效率
做到了前后端的分離,易于代碼的整合.方便使用者分工合作。也提高了重用性,對于相似部分方便復(fù)用,提高了開發(fā)效率。
那么,你是不是還記住了那句話“Django框架遵循MVC設(shè)計(jì)”?MVC是個(gè)什么玩意兒?
M表示Model,主要用于對數(shù)據(jù)庫層的封裝;
V表示View,用于向用戶展示結(jié)果;
C表示Controller,是核心,用于處理請求、獲取數(shù)據(jù)、返回結(jié)果。
關(guān)于MVC,有3點(diǎn)需要注意:
1.大部分開發(fā)語言中都有MVC框架;
2.MVC框架的核心思想是:解耦;
3.能降低各功能模塊之間耦合性,方便變更,更容易重構(gòu)代碼,最大程度實(shí)現(xiàn)代碼重用。
最后,Django架構(gòu)模式:
MVT架構(gòu)模式:在MVC基礎(chǔ)上,對控制器controller進(jìn)行了封裝,增加了模塊功能【Templates】實(shí)現(xiàn)前端網(wǎng)頁【Html】
MVC架構(gòu)模式:數(shù)據(jù)model–>視圖views–>數(shù)據(jù)交互–>服務(wù)器–>控制器controller–>相應(yīng)函數(shù)的調(diào)用。
到此這篇關(guān)于Django MTV模式的文章就介紹到這了,更多相關(guān)Django MTV模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
利用Python實(shí)現(xiàn)生成并識別圖片驗(yàn)證碼
這篇文章主要為大家的詳細(xì)介紹了如何利用Python實(shí)現(xiàn)生成并識別圖片驗(yàn)證碼,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-02-02
Python編程matplotlib繪圖挑鉆石seaborn小提琴和箱線圖
這篇文章主要為大家介紹了Python編程如何使用matplotlib繪圖來挑出完美的鉆石以及seaborn小提琴和箱線圖,有需要的朋友可以借鑒參考下,希望能夠優(yōu)速幫助2021-10-10
Python中Selenium模擬JQuery滑動解鎖實(shí)例
這篇文章主要介紹了Python中Selenium模擬JQuery滑動解鎖實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
python 爬取馬蜂窩景點(diǎn)翻頁文字評論的實(shí)現(xiàn)
這篇文章主要介紹了python 爬取馬蜂窩景點(diǎn)翻頁文字評論的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01
Python數(shù)據(jù)結(jié)構(gòu)與算法之常見的分配排序法示例【桶排序與基數(shù)排序】
這篇文章主要介紹了Python數(shù)據(jù)結(jié)構(gòu)與算法之常見的分配排序法,結(jié)合實(shí)例形式分析了桶排序與基數(shù)排序的相關(guān)原理及實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-12-12
Python按天實(shí)現(xiàn)生成時(shí)間范圍序列的方法詳解
有的時(shí)候我們希望生成一段時(shí)間返回,比如從?2022-01-01?00:00:00?后面的?10?天,這么?10?個(gè)?datetime?對象,但是我們又不想自己去計(jì)算哪些月有30天哪些月有31天。所以本文將用Python實(shí)現(xiàn)按天自動生成時(shí)間范圍序列,需要的可以參考一下2022-11-11
python 多線程將大文件分開下載后在合并的實(shí)例
今天小編就為大家分享一篇python 多線程將大文件分開下載后在合并的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-11-11
詳解Selenium如何實(shí)現(xiàn)獲取cookies并保存
這篇文章主要為大家詳細(xì)介紹了Selenium如何實(shí)現(xiàn)獲取cookies保存起來用于下次訪問,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-05-05

