URLconf+MTV:Django眼中的MVC

MVC是衆所周知的模式,即:將應用程序分解成三個組成部分:model(模型),view(視圖),和 controller(控制 器)。其中:
         M 管理應用程序的狀態(通常存儲到數據庫中),並約束改變狀態的行爲(或者叫做“業務規則”)。
         C 接受外部用戶的操作,根據操作訪問模型獲取數據,並調用“視圖”顯示這些數據。控制器是將“模型”和“視圖”隔離,併成爲二者之間的聯繫紐帶。
          V 負責把數據格式化後呈現給用戶。

在《Agile Web Development with Rails》中有這樣一張圖對MVC模式進行了很好的解釋:

spacer.gifwKioL1ULV8-iBlubAAEr3CArWiM119.gif

 

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的,或者是另類的。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章