Django是一個(gè)基于MVC構造的框架。但是在Django中,控制器接受用戶(hù)輸入的部分由框架自行處理,所以 Django 里更關(guān)注的是模型(Model)、模板(Template)和視圖(Views),稱(chēng)為 MTV模式。它們各自的職責如下:
層次 | 職責 |
模型(Model),即數據存取層 | 處理與數據相關(guān)的所有事務(wù): 如何存取、如何驗證有效性、包含哪些行為以及數據之間的關(guān)系等。 |
模板(Template),即業(yè)務(wù)邏輯層 | 處理與表現相關(guān)的決定: 如何在頁(yè)面或其他類(lèi)型文檔中進(jìn)行顯示。 |
視圖(View),即表現層 | 存取模型及調取恰當模板的相關(guān)邏輯。模型與模板的橋梁。 |
從以上表述可以看出Django 視圖不處理用戶(hù)輸入,而僅僅決定要展現哪些數據給用戶(hù),而Django 模板 僅僅決定如何展現Django視圖指定的數據?;蛘哒f(shuō), Django將MVC中的視圖進(jìn)一步分解為 Django視圖 和 Django模板兩個(gè)部分,分別決定 “展現哪些數據” 和 “如何展現”,使得Django的模板可以根據需要隨時(shí)替換,而不僅僅限制于內置的模板。
至于MVC控制器部分,由Django框架的URLconf來(lái)實(shí)現。URLconf機制是使用正則表達式匹配URL,然后調用合適的Python函數。URLconf對于URL的規則沒(méi)有任何限制,你完全可以設計成任意的URL風(fēng)格,不管是傳統的,RESTful的,或者是另類(lèi)的??蚣馨芽刂茖咏o封裝了,無(wú)非與數據交互這層都是數據庫表的讀,寫(xiě),刪除,更新的操作。在寫(xiě)程序的時(shí)候,只要調用相應的方法就行了,感覺(jué)很方便。程序員把控制層東西交給Django自動(dòng)完成了。 只需要編寫(xiě)非常少的代碼完成很多的事情。所以,它比MVC框架考慮的問(wèn)題要深一步,因為我們程序員大都在寫(xiě)控制層的程序?,F在這個(gè)工作交給了框架,僅需寫(xiě)很少的調用代碼,大大提高了工作效率。