在讀完《初識(shí)Django:簡單Web應(yīng)用示例》(以下簡稱《示例》)后,你或許學(xué)會(huì)了如何使用Django框架來構(gòu)建應(yīng)用,但為什么要這樣來做?其背后的原理是什么?你或許有些懵,本文將帶你理解:
lDjango請(qǐng)求處理流程;
lDjango設(shè)計(jì)方法。
一、Django請(qǐng)求處理流程
1.項(xiàng)目與應(yīng)用代碼詳單
《示例》中我們所構(gòu)建的Web應(yīng)用代碼文件,分為項(xiàng)目WebPro和應(yīng)用WebApp,詳情如下:
2.Django請(qǐng)求處理流程
打開瀏覽器,輸入127.0.0.1:8000/hello-post,瀏覽器將請(qǐng)求發(fā)送到127.0.0.1服務(wù)器(本機(jī))8000端口。
(1).根據(jù)hello_post查詢對(duì)應(yīng)的處理函數(shù):Django框架加載urls.py,代碼行url(r'^hello-post$', views.hello_post)標(biāo)識(shí)hello-post的請(qǐng)求由views.hello_post函數(shù)處理。
(2).業(yè)務(wù)處理:views.py的Hello_post函數(shù)查詢數(shù)據(jù)庫的title值,并將Hello與其拼接成ctx[‘wname’],將其發(fā)送給hello.html。
(3).頁面顯示:Hello.html將wname值進(jìn)行替換,生成可展示的視圖。
(4).請(qǐng)求流程以頁面正確顯示結(jié)束,這里需要關(guān)注的是本項(xiàng)目中事先定義了Model,該模型的定義在models.py文件中。
二、 Django設(shè)計(jì)原理
通過上面的分析,我們大致可以體會(huì)到:使用models.py定義數(shù)據(jù)模型,使用views.py編寫后臺(tái)業(yè)務(wù)處理邏輯,使用templates/hello.html展示可視化信息。簡單地說,從前端頁面請(qǐng)求到后臺(tái)數(shù)據(jù)的處理再到數(shù)據(jù)的頁面顯示,可以描述成model-view-template,即M-V-T。
事實(shí)上,Web框架經(jīng)常地采用MVC(Model View Controller)設(shè)計(jì)方法,該方法是在研究Smalltalk-80期間設(shè)計(jì)的,采用一種將業(yè)務(wù)邏輯、數(shù)據(jù)、界面顯示分離的方法組織代碼。
lM-Model:封裝數(shù)據(jù)和數(shù)據(jù)的處理方法,用于業(yè)務(wù)的數(shù)據(jù)建模。
lV-View:定義Web頁面的視圖,用于和用戶交互。
lC-Controller:定義用戶頁面對(duì)用戶輸入的響應(yīng)方式,用于控制Web應(yīng)用的流程。
現(xiàn)在再回過來看Django的MVT模式,與上述的MVC的映射關(guān)系:
Web應(yīng)用框架 | Django |
---|---|
M-Model | M-Model |
V-View | T-Template |
C-Controller | V-View |
通過上面的分析,Django項(xiàng)目與應(yīng)用構(gòu)建的原理便清晰可見了。
-
數(shù)據(jù)模型
+關(guān)注
關(guān)注
0文章
49瀏覽量
10061 -
可視化
+關(guān)注
關(guān)注
1文章
1203瀏覽量
21040 -
Models
+關(guān)注
關(guān)注
0文章
74瀏覽量
20762
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
Gradle構(gòu)建的多模塊Spring Boot項(xiàng)目
![Gradle<b class='flag-5'>構(gòu)建</b>的多模塊Spring Boot<b class='flag-5'>項(xiàng)目</b>](https://file1.elecfans.com/web2/M00/A6/06/wKgaomURK96AGt0QAAGgG0FMeEk824.jpg)
如何使項(xiàng)目構(gòu)建輸出到lib文件?
如何知道xilinx的哪個(gè)版本用于構(gòu)建項(xiàng)目?
8086工程構(gòu)建項(xiàng)目時(shí)報(bào)錯(cuò)
如何使用Keil MDK-ARM編譯器構(gòu)建項(xiàng)目
如何使用GitHub構(gòu)建STM32CubeIDE項(xiàng)目?
使用STM32CubeIDE構(gòu)建項(xiàng)目圖標(biāo)進(jìn)行構(gòu)建時(shí),鏈接失敗的原因是什么?
MIMXRT106S項(xiàng)目構(gòu)建失敗的原因?怎么解決?
使用MDK構(gòu)建Mbed操作系統(tǒng)項(xiàng)目
Grindbit的構(gòu)建開源項(xiàng)目
![Grindbit的<b class='flag-5'>構(gòu)建</b>開源<b class='flag-5'>項(xiàng)目</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
可以在家中構(gòu)建的最酷的Arduino項(xiàng)目
![可以在家中<b class='flag-5'>構(gòu)建</b>的最酷的Arduino<b class='flag-5'>項(xiàng)目</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
使用Launchpad和Energia構(gòu)建的開源項(xiàng)目
![使用Launchpad和Energia<b class='flag-5'>構(gòu)建</b>的開源<b class='flag-5'>項(xiàng)目</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
機(jī)器人項(xiàng)目構(gòu)建
![機(jī)器人<b class='flag-5'>項(xiàng)目</b><b class='flag-5'>構(gòu)建</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
互聯(lián)蜂箱的構(gòu)建項(xiàng)目
![互聯(lián)蜂箱的<b class='flag-5'>構(gòu)建</b><b class='flag-5'>項(xiàng)目</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
CMake構(gòu)建后的項(xiàng)目結(jié)構(gòu)解析
![CMake<b class='flag-5'>構(gòu)建</b>后的<b class='flag-5'>項(xiàng)目</b>結(jié)構(gòu)解析](https://file1.elecfans.com/web2/M00/AD/68/wKgaomVNlNqABZE0AACQ_0qe0Es164.jpg)
評(píng)論