MVC/MVT 框架
MVC
是一種編寫代碼的邏輯上的分割模型,即把代碼分為三大部分:M反番、V沙热、C叉钥,每部分明確的負(fù)責(zé)一個(gè)層面。這樣的作用是什么篙贸?那就是為了日后更方便的代碼維護(hù)投队、代碼遷移和代碼重構(gòu)等。
傳統(tǒng)的MVC(Model-View-Control)模型適用于大多數(shù)的桌面App和網(wǎng)絡(luò)App的程序編寫爵川。
即Model模型
(負(fù)責(zé)數(shù)據(jù)庫(kù)) -> View視圖
(負(fù)責(zé)將數(shù)據(jù)顯示為最終界面) -> Controller控制器
(負(fù)責(zé)將用戶請(qǐng)求轉(zhuǎn)化為界面或數(shù)據(jù)庫(kù)的改動(dòng))敷鸦。
Django的代碼結(jié)構(gòu)是典型的MVC框架。只是具體實(shí)施上寝贡,它把視圖View作為一個(gè)Router路由來(lái)負(fù)責(zé)不同URL映射到不同的處理方法扒披,然后用Template模版來(lái)作為動(dòng)態(tài)顯示,所以也叫MVT模型圃泡。(其實(shí)這么叫非常不準(zhǔn)確碟案,所以提到MVT的人不多)
注意:網(wǎng)路上對(duì)MVC和MVT的說(shuō)法、圖解都各有不一洞焙,因?yàn)楹芏嗳藢?duì)這些叫法和結(jié)構(gòu)都產(chǎn)生了混淆。所以不能太依賴各種非官方的文章和圖片拯啦。
了解Django的這種“代碼結(jié)構(gòu)”有什么作用澡匪?
因?yàn)镈jango是一個(gè)以及成熟開(kāi)發(fā)的網(wǎng)絡(luò)App,我們要做的只是改一改具體業(yè)務(wù)信息即可褒链。正因?yàn)樗且呀?jīng)完整開(kāi)發(fā)的App唁情,所以我們要清楚他開(kāi)發(fā)的結(jié)構(gòu)是什么,才知道哪種需求到哪里去改甫匹。
ORM模型
Object-Relations-Mappings
甸鸟,實(shí)際上是Object -> Mappings -> Relations
這種方向,即:
把業(yè)務(wù)抽象為程序中的Object對(duì)象
兵迅,然后通過(guò)一種Mappings方法
抢韭,映射為Relational數(shù)據(jù)庫(kù)
的表格中去。
簡(jiǎn)而言之恍箭,ORM實(shí)際上是一種操作數(shù)據(jù)庫(kù)的模型
刻恭,或是一套操作數(shù)據(jù)庫(kù)的方法
。
Django中提供了一套完善的ORM模型扯夭,即一個(gè)工具包鳍贾,讓你輕松把自己創(chuàng)建的業(yè)務(wù)對(duì)象和數(shù)據(jù)庫(kù)里的表格對(duì)應(yīng)起來(lái),隨便操作交洗。
安裝
建議在虛擬環(huán)境中骑科,且為django項(xiàng)目獨(dú)立創(chuàng)建:
$ pip install django
創(chuàng)建Django項(xiàng)目
$ django-admin startproject ./MyDjangoProject
創(chuàng)建好Django項(xiàng)目后,文件夾中會(huì)出現(xiàn)如下目錄結(jié)構(gòu):
-
./MyDjangoProject
-
manage.py
:整個(gè)項(xiàng)目的管理文件 -
MyDjangoProject
:整個(gè)項(xiàng)目文件__init__.py
-
setting.py
:項(xiàng)目配置文件 -
urls.py
:網(wǎng)址的路由設(shè)置构拳,不同路徑分配不同的處理函數(shù) -
wsgi.py
:作為Web Server咆爽,并負(fù)責(zé)和Django框架進(jìn)行交互
-
注意:Django中梁棠,一個(gè)項(xiàng)目只是一個(gè)Admin管理員,不包括任何的具體實(shí)現(xiàn)伍掀。真正的業(yè)務(wù)代碼實(shí)現(xiàn)掰茶,也就是具體的MVC實(shí)現(xiàn),是要在單獨(dú)的各個(gè)模塊中的蜜笤。
Django的模塊分割
Django中的一個(gè)項(xiàng)目只是代表一個(gè)大框架濒蒋,不同于Flask創(chuàng)建一個(gè)項(xiàng)目即一個(gè)完整的app。
Django中的一個(gè)app只是大框架下的一個(gè)子模塊把兔。Django中的每個(gè)app都具備完全的MVC結(jié)構(gòu)代碼沪伙。
實(shí)際工作中,在我們?cè)O(shè)計(jì)好業(yè)務(wù)模塊
后县好,就可以在Django中把模塊分開(kāi): 一個(gè)模塊生成一個(gè)子目錄围橡,即一個(gè)app
應(yīng)用。 每個(gè)app子文件夾都有同樣的一套文件缕贡,實(shí)現(xiàn)了典型MVC代碼分割翁授。
在一個(gè)Django項(xiàng)目中,創(chuàng)建一個(gè)子app應(yīng)用的命令為:
$ python ./manage.py startapp MyApp01
創(chuàng)建好子app的MyApp01后晾咪,Django的目錄中就出現(xiàn)了一個(gè)子目錄MyApp01
收擦,結(jié)構(gòu)如下:
-
./MyApp01
-
admin.py
:網(wǎng)址后臺(tái)Dashboard相關(guān) -
__init__.py
: -
migrations/
__init__.py
-
models.py
:MVC中的M,負(fù)責(zé)和數(shù)據(jù)庫(kù)交互 -
tests.py
:測(cè)試代碼 -
views.py
:MVC中的V谍倦,負(fù)責(zé)頁(yè)面的模版
-
建立好各個(gè)模塊后塞赂,我們需要在項(xiàng)目主配置settings.py
中把每個(gè)模塊進(jìn)行注冊(cè),才能集合為一個(gè)項(xiàng)目昼蛀。
在settings.py
中注冊(cè)的方法如下:
啟動(dòng)服務(wù)器:
$ python ./manage.py runserver IP:端口
然后就會(huì)啟動(dòng)一個(gè)指定IP的服務(wù)器: