(轉載)http://www.cnblogs.com/michaely/p/3340087.html MVC是眾所周知的模式,即:將應用程式分解成三個組成部分:model(模型),view(視圖),和 controller(控制 器)。其中: M 管理應用程式的狀態(通常存儲到資料庫中),並約束改變 ...
(轉載)http://www.cnblogs.com/michaely/p/3340087.html
MVC是眾所周知的模式,即:將應用程式分解成三個組成部分:model(模型),view(視圖),和 controller(控制 器)。其中:
M 管理應用程式的狀態(通常存儲到資料庫中),並約束改變狀態的行為(或者叫做“業務規則”)。
C 接受外部用戶的操作,根據操作訪問模型獲取數據,並調用“視圖”顯示這些數據。控制器是將“模型”和“視圖”隔離,併成為二者之間的聯繫紐帶。
V 負責把數據格式化後呈現給用戶。
在《Agile Web Development with Rails》中有這樣一張圖對MVC模式進行了很好的解釋:
Django也是一個MVC框架。但是在Django中,控制器接受用戶輸入的部分由框架自行處理,所以 Django 里更關註的是模型(Model)、模板(Template)和視圖(Views),稱為 MTV模式:
M 代表模型(Model),即數據存取層。 該層處理與數據相關的所有事務: 如何存取、如何驗證有效性、包含哪些行為以及數據之間的關係等。
T 代表模板(Template),即表現層。 該層處理與表現相關的決定: 如何在頁面或其他類型文檔中進行顯示。
V 代表視圖(View),即業務邏輯層。 該層包含存取模型及調取恰當模板的相關邏輯。 你可以把它看作模型與模板之間的橋梁。
需要註意的是,不能簡單的把 Django 視圖認為是MVC控制器,把 Django 模板認為MVC視圖。
區別在於:
Django 視圖 不處理用戶輸入,而僅僅決定要展現哪些數據給用戶;
Django 模板 僅僅決定如何展現Django視圖指定的數據。
或者說, Django將MVC中的視圖進一步分解為 Django視圖 和 Django模板兩個部分,分別決定 “展現哪些數據” 和 “如何展現”,使得Django的模板可以根據需要隨時替換,而不僅僅限制於內置的模板。
至於MVC控制器部分,由Django框架的URLconf來實現。URLconf設計非常巧妙,其機制是使用正則表達式匹配URL,然後調用合適的Python函數。雖然一開始有些不習慣,但是你很快就會喜歡上它,因為URLconf對於URL的規則沒有任何限制,你完全可以設計成任意的URL風格,不管是傳統的,RESTful的,或者是另類的。