Django的MVT模式與MVC模式


                                      Django的MVT模式與MVC模式

在正式開始coding之前,我覺得有必要探討下Django的MVT模式,理論和實踐相結合,才能更好的掌握一門技術。Django中的MVT模式,Django就是屬於MVC模式。MVC(Model-View-Controller)模型-視圖-控制器,MVC是一種 軟件框架模式,最開始用於Desktop程序開發,現在已被廣泛使用,包括Web開發,MVT(Model-View- Template),Django內部的URLconf作為控制器的角色,負責了接收用戶請求和轉發請求的工作,Django 里更關注的是模型(Model)、模板(Template)和視圖(Views),故稱之為 Django MVT 模式。

 

介紹MVT:

M全拼為Model,與MVC中的M功能相同,負責和數據庫交互,進行數據處理。

V全拼為View,與MVC中的C功能相同,接收請求,進行業務處理,返回應答。

T全拼為Template,與MVC中的V功能相同,負責封裝構造要返回的html。

Django中MVT的設計是遵守 MVC的流程去執行。

MVT即模型-模版-視圖模式,其標准名稱是有爭議的。在MVC的解釋中,視圖描述了展現給用戶的數據,是指所看到的數據,而不是如何看見它。在python中視圖是指對某一特定URL的回調函數,因為回調函數描述了所要展現的數據。模版用於將內容與展現分離。在django中,視圖描述了要展現的數據,而視圖一般轉交給模版。模版描述了數據如何展現,控制器則是指django框架本身,通過URL配置,系統將一個請求發送到一個合適的視圖。

 

MVT執行順序

設計模式: 核心思想是分工,解耦,讓不同的代碼之間降低耦合,增強代碼的可擴展性和可移植性,實現向后兼容

1,客戶端發出請求,與關系型數據庫進行交互

2,路由接收請求,根據請求地址查找視圖

3,視圖接收,處理 找到相應的Model(數據交互)

4, 與關系型數據庫進行交互 取得數據  

5,將取到的數據返回給Model

6,將數據交給view進行處理

7,將數據套入到需要的template,封裝相對應的html,css,js編寫的模板語言

8,將封裝好的模板語言返回給view進行處理

9,客戶端接受結果進行渲染html和css 執行js

 

MVT基於MVC,所以流程與MVC十分相似,客戶端發送請求,根據請求地址去尋找視圖,視圖把接收並處理請求,訪問數據庫,提取數據,由視圖返回結果到模板上,客戶端接收渲染

              MVT詳解圖

 

MVT的處理過程: Django框架接收了用戶請求和參數后,通過正則表達式匹配URL,發送到對應視圖進行處理,處理完畢后,視圖調用M處理數據,再調用T返回界面給瀏覽器,然后顯示到頁面上。如下圖所繪:

 

 

 

介紹MVC:

M全拼為Model(模塊),主要封裝對數據庫層的訪問, 數據處理,對數據庫中的數據進行增、刪、改、查操作。

V全拼為View(視圖),界面顯示,用於封裝結果,生成頁面展示的html內容。

C全拼為Controller(控制器),邏輯處理,用於接收請求,處理業務邏輯,與Model和View交互,返回結果。

 

MVC模塊的核心宗旨就是:解耦,模型的復用,讓不同的代碼之間的耦合度降低,增強代碼的擴展性和可移植性還有方便維護,模型不用關心處理結果展現,比如模型返回一些數據,然后交給不用的視圖展現,可以使用不同的視圖來訪問同一個模型。方便測試, 比如,將業務邏輯代碼寫在servlet里面,需要部署到容器上,然后才能測試。而將業務邏輯代碼寫在類里面,可以直接用main()測試(不依賴容器)。

 

MVC即模型,里面存在視圖與控制器模式,就是為那些需要為同樣的數據提供多個視圖的應用程序而設計的。它很好地實現了數據層與表示層的分離,特別適用於開發與用戶圖形界面有關的應用程序,能夠提高效率,降低耦合度,增加代碼的可移植性,可以更好的去維護代碼。

控制器:控制器是用來處理用戶命令以及程序事件,模型維護數據並提供數據訪問方法;

視圖:視圖用於數據的顯示,把數據庫中的數據顯示到頁面上。

 

 

MVC流程

MVC設計模式也可以叫做MVC的流程,從開頭到結束,是怎樣一步步執行的:

1,客戶端發出請求

2,controll,接收請求,進行業務處理 發送給Model

3, 與關系型數據庫進行交互 取得數據  

4,將取到的數據返回給Model

5,將數據交給controller.進行處理

6,將數據給view進行HTML,css,js等進行封裝

7,返回封裝好的HTML給controll

8,controll返回給客戶端進行渲染HTML和css執行js

 

 

                       MVC流程圖

 

從流程圖中可以看出,客戶端發出請求到服務器,服務器處理請求,然后與數據庫交互,提取數據,返回到服務器,服務器處理后發送給客戶端,客戶端接收,渲染到頁面上。這就是MVC的流程,他的層次分明,耦合度低,前后端分離。

 

在項目開發中的MVC流程,

 

                         Web中的MVC

 

MVC的缺點:事物都有兩面性,有好有壞,MVC也是這樣,他的缺點如下

使用mvc,會增加代碼量、相應地也會增加軟件開發的成文,設計的難度也會增加,適合大型項目。

(1)視圖跟控制器過於緊密的連接,(視圖與控制器是相互分離,但卻是聯系緊密的部件,視圖沒有控制器的存在,其應用是很有限的,反之亦然,這樣就妨礙了他們的獨立重用。【例如,不可能總是在jsp頁面中直接訪問模型,一般放在邏輯控制層進行處理,servlet】)
(2)增加了系統結構和實現的復雜性
(3)部分高級界面工具或構造器不支持MVC
(4)視圖對模型數據的訪問效率低(依據模型操作接口的不同,視圖可能需要多次調用才能獲得足夠的顯示數據。對未變化數據的不必要的頻繁訪問,也將損害操作性能。【例如,頁面的有一部分數據我並沒有更新,但是提交到模型層照樣會去獲得返回顯示 】)
(5)調試應用程序帶來了一定的困難。每個構件在使用之前都需要經過徹底的測試。
     簡單的小型項目,使用MVC設計反而會降低開發效率,層和層雖然相互分離,但是之間關聯性太強,沒有做到獨立的重用

 

總結:Django的MVT模式本質上和MVC是一樣的,也是為了各組件間保持松耦合關系,只是定義上有些許不同,流程也是大致一樣,本質上相同,兩者的MV都是相同的,不同的是:T代表了模板,C代表了控制器,Django遵循的是MVC模式,而MVT是Django中的一種回調函數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM