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