Django MTV和MVC的區(qū)別詳解
在上一節(jié)《Django是什么》中,我們對(duì) Django 的誕生以及 Web 框架的概念有了基本的了解,本節(jié)我們介紹 Django 的設(shè)計(jì)模式,也就是 MTV。
在 Web 開(kāi)發(fā)領(lǐng)域還有另外一個(gè)非常著名的設(shè)計(jì)模式——MVC,它和 MTV 又有什么區(qū)別呢?這也是本節(jié)關(guān)注的重點(diǎn)內(nèi)容。
1. MVC設(shè)計(jì)模式
我們先對(duì) MVC 設(shè)計(jì)模式進(jìn)行介紹,它是 Web 設(shè)計(jì)模式的經(jīng)典之作,MTV 模式也是在它的基礎(chǔ)上衍生而來(lái)。
MVC 是 Model-View-Controller 的縮寫,其中每個(gè)單詞都有其不同的含義:
- Modle 代表數(shù)據(jù)存儲(chǔ)層,是對(duì)數(shù)據(jù)表的定義和數(shù)據(jù)的增刪改查;
- View 代表視圖層,是系統(tǒng)前端顯示部分,它負(fù)責(zé)顯示什么和如何進(jìn)行顯示;
- Controller 代表控制層,負(fù)責(zé)根據(jù)從 View 層輸入的指令來(lái)檢索 Model 層的數(shù)據(jù),并在該層編寫代碼產(chǎn)生結(jié)果并輸出。

圖1:MVC 設(shè)計(jì)模式示意圖
MVC 設(shè)計(jì)模式的請(qǐng)求與響應(yīng)過(guò)程描述如下:
- 用戶通過(guò)瀏覽器向服務(wù)器發(fā)起 request 請(qǐng)求,Controller 層接受請(qǐng)求后,同時(shí)向 Model 層和 View 發(fā)送指令;
- Mole 層根據(jù)指令與數(shù)據(jù)庫(kù)交互并選擇相應(yīng)業(yè)務(wù)數(shù)據(jù),然后將數(shù)據(jù)發(fā)送給 Controller 層;
- View 層接收到 Controller 的指令后,加載用戶請(qǐng)求的頁(yè)面,并將此頁(yè)面發(fā)送給 Controller 層;
- Controller 層接收到 Model 層和 View 層的數(shù)據(jù)后,將它們組織成響應(yīng)格式發(fā)送給瀏覽器,瀏覽器通過(guò)解析后把頁(yè)面展示出來(lái)。
MVC 的 3 層之間緊密相連,但又相互獨(dú)立,每一層的修改都不會(huì)影響其它層,每一層都提供了各自獨(dú)立的接口供其它層調(diào)用,MVC 的設(shè)計(jì)模式降低了代碼之間的耦合性(即關(guān)聯(lián)性),增加了模塊的可重用性,這就是 MVC 的設(shè)計(jì)模式。
2. MTV設(shè)計(jì)模式
那么 Django 的 MTV 又是怎么回事呢?下面講解 Django 的設(shè)計(jì)模式。
Django 借鑒了經(jīng)典的 MVC 模式,它也將交互的過(guò)程分為了 3 個(gè)層次,也就是 MTV 設(shè)計(jì)模式;
- Model:數(shù)據(jù)存儲(chǔ)層,處理所有數(shù)據(jù)相關(guān)的業(yè)務(wù),和數(shù)據(jù)庫(kù)進(jìn)行交互,并提供數(shù)據(jù)的增刪改查;
- Template:模板層(也叫表現(xiàn)層)具體來(lái)處理頁(yè)面的顯示;
- View:業(yè)務(wù)邏輯層,處理具體的業(yè)務(wù)邏輯,它的作用是連通Model 層和 Template 。

圖2:Django MTV 設(shè)計(jì)模式示意圖
我們按照 MVC 的設(shè)計(jì)模式對(duì) MTV 進(jìn)行分析,MTV 設(shè)計(jì)模式中,用 View 層取代了 Controller 層的位置,用 Template 層取代了原來(lái) View 層的位置。
初次接觸 Django 的設(shè)計(jì)模式的人,可能會(huì)對(duì) Template 層產(chǎn)生疑問(wèn),其實(shí) Template 英文的含義就是“模板”的意思,你可以簡(jiǎn)單理解成,它是一個(gè) HTML 頁(yè)面 ,HTML 頁(yè)面的渲染在視圖層完成。
同樣我們也對(duì) MTV 設(shè)計(jì)模式的請(qǐng)求與響應(yīng)過(guò)程進(jìn)行描述:
- 用戶通過(guò)瀏覽器對(duì)服務(wù)器發(fā)起 request 請(qǐng)求,服務(wù)器接收請(qǐng)求后,通過(guò) View 的業(yè)務(wù)邏輯層進(jìn)行分析,同時(shí)向 Model 層和Template 層發(fā)送指令;
- Mole 層與數(shù)據(jù)庫(kù)進(jìn)行交互,將數(shù)據(jù)返回給 View 層;
- Template 層接收到指令后,調(diào)用相應(yīng)的模板,并返回給 View 層;
- View 層接收到模板與數(shù)據(jù)后,首先對(duì)模板進(jìn)行渲染(即將相應(yīng)的數(shù)據(jù)賦值給模板),然后組織成響應(yīng)格式返回給瀏覽器,瀏覽器進(jìn)行解析后并最終呈現(xiàn)給用戶。
通過(guò)以上兩種設(shè)計(jì)模式的比較, 我們可以得出 MTV 是 MVC 的一種細(xì)化,將原來(lái) MVC 中的 V 層拿出來(lái)進(jìn)行分離,視圖的顯示與如何顯示交給 Template 層,而 View 層更專注于實(shí)現(xiàn)業(yè)務(wù)邏輯。其實(shí)在 Django 是有 Controller 層的,只不過(guò)它由框架本身來(lái)實(shí)現(xiàn),所以我們不用關(guān)心它。Django 更關(guān)注于M、T 和 V。
到此這篇關(guān)于Django MTV和MVC的區(qū)別詳解的文章就介紹到這了,更多相關(guān)Django MTV和MVC內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python調(diào)用有道智云API實(shí)現(xiàn)文件批量翻譯
這篇文章主要介紹了python如何調(diào)用有道智云API實(shí)現(xiàn)文件批量翻譯,幫助大家更好得理解和使用python,感興趣的朋友可以了解下2020-10-10
基于Python編寫將文本轉(zhuǎn)換為語(yǔ)音的簡(jiǎn)易應(yīng)用
這篇文章主要介紹了如何使用Python編寫一個(gè)簡(jiǎn)單的應(yīng)用程序,將文本轉(zhuǎn)換為語(yǔ)音,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以動(dòng)手嘗試一下2023-08-08
Python實(shí)現(xiàn)杰卡德距離以及環(huán)比算法講解
這篇文章主要為大家介紹了Python實(shí)現(xiàn)杰卡德距離以及環(huán)比算法的示例講解,有需要的朋友可以借鑒參考下2022-02-02
python循環(huán)某一特定列的所有行數(shù)據(jù)(方法示例)
在Python中,處理表格數(shù)據(jù)(比如CSV文件、Excel文件等)時(shí),我們通常會(huì)使用pandas庫(kù),因?yàn)樗峁┝素S富的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)分析工具,下面,我將以處理CSV文件中的某一特定列的所有行數(shù)據(jù)為例,給出詳細(xì)、完整的代碼示例,感興趣的朋友跟隨小編一起看看吧2024-08-08
利用OpenCV和Python實(shí)現(xiàn)查找圖片差異
今天小編就為大家分享一篇利用OpenCV和Python實(shí)現(xiàn)查找圖片差異,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12
基于pyinstaller超級(jí)加密操作(加殼和轉(zhuǎn)c)
這篇文章主要介紹了基于pyinstaller超級(jí)加密操作 (加殼和轉(zhuǎn)c),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03
python畫圖——實(shí)現(xiàn)在圖上標(biāo)注上具體數(shù)值的方法
今天小編就為大家分享一篇python畫圖——實(shí)現(xiàn)在圖上標(biāo)注上具體數(shù)值的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07
Python2和Python3中@abstractmethod使用方法
這篇文章主要介紹了Python2和Python3中@abstractmethod使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02
python基于機(jī)器學(xué)習(xí)預(yù)測(cè)股票交易信號(hào)
近年來(lái),隨著技術(shù)的發(fā)展,機(jī)器學(xué)習(xí)和深度學(xué)習(xí)在金融資產(chǎn)量化研究上的應(yīng)用越來(lái)越廣泛和深入。目前,大量數(shù)據(jù)科學(xué)家在Kaggle網(wǎng)站上發(fā)布了使用機(jī)器學(xué)習(xí)/深度學(xué)習(xí)模型對(duì)股票、期貨、比特幣等金融資產(chǎn)做預(yù)測(cè)和分析的文章。本文就來(lái)看看如何用python預(yù)測(cè)股票交易信號(hào)2021-05-05
Django REST Framework序列化外鍵獲取外鍵的值方法
今天小編就為大家分享一篇Django REST Framework序列化外鍵獲取外鍵的值方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07

