昨天看了一個(gè)關(guān)于如何使用Django編寫一個(gè)blog的視頻,發(fā)現(xiàn)聽了一個(gè)小時(shí)仍然稀里糊涂量瓜,一步步照著做完全不懂為什么,雖然最終還沒運(yùn)行成功途乃。榔至。。還是先理解一下Django框架及其設(shè)計(jì)模式吧欺劳。
1唧取、Django是什么
Django是python的web開發(fā)框架,遵循MVC的設(shè)計(jì)模式划提,但在Django中通常稱為MTV(model-template-views)枫弟。框架能夠幫助你把程序的整體架構(gòu)搭建好, 而我們所需要做的工作就是填寫邏輯, 而框架能夠在合適的時(shí)候調(diào)用你寫的邏輯, 而不需要我們自己去調(diào)用邏輯, 讓W(xué)eb開發(fā)變的更敏捷鹏往。
1.1淡诗、MVC模式
模型(model):模型持有所有的數(shù)據(jù)骇塘、狀態(tài)和程序邏輯。模型獨(dú)立于視圖和控制器
視圖(view):用來呈現(xiàn)模型韩容。視圖通常直接從模型中取得它需要顯示的狀態(tài)與數(shù)據(jù)款违。對于相同的信息可以有多個(gè)不同的顯示形式或視圖
控制器(controller):位于視圖和模型中間,負(fù)責(zé)接受用戶的輸入群凶,將輸入進(jìn)行解析并反饋給模型插爹,通常一個(gè)視圖具有一個(gè)控制器
他們之間以一種插件式的、松耦合的方式連接在一起请梢,模型負(fù)責(zé)業(yè)務(wù)對象與數(shù)據(jù)庫的映射(ORM)赠尾,視圖負(fù)責(zé)與用戶的交互(頁面),控制器接受用戶的輸入調(diào)用模型和視圖完成用戶的請求毅弧,其示意圖如下所示:
1.2气嫁、MTV模式
Django的MTV模式本質(zhì)上和MVC是一樣的,也是為了各組件間保持松耦合關(guān)系够坐,只是定義上有些許不同寸宵,Django的MTV分別是值:
M 代表模型(Model):負(fù)責(zé)業(yè)務(wù)對象和數(shù)據(jù)庫的關(guān)系映射(ORM)。
T 代表模板 (Template):負(fù)責(zé)如何把頁面展示給用戶(html)元咙。
V 代表視圖(View):負(fù)責(zé)業(yè)務(wù)邏輯邓馒,并在適當(dāng)時(shí)候調(diào)用Model和Template。
除了以上三層之外蛾坯,還需要一個(gè)URL分發(fā)器光酣,它的作用是將一個(gè)個(gè)URL的頁面請求分發(fā)給不同的View處理,View再調(diào)用相應(yīng)的Model和Template脉课,MTV的響應(yīng)模式如下所示:
1救军,Web服務(wù)器(中間件)收到一個(gè)http請求
2,Django在URLconf里查找對應(yīng)的視圖(View)函數(shù)來處理http請求
3倘零,視圖函數(shù)調(diào)用相應(yīng)的數(shù)據(jù)模型來存取數(shù)據(jù)唱遭、調(diào)用相應(yīng)的模板向用戶展示頁面
4,視圖函數(shù)處理結(jié)束后返回一個(gè)http的響應(yīng)給Web服務(wù)器
5呈驶,Web服務(wù)器將響應(yīng)發(fā)送給客戶端
1.2.1拷泽、ORM對象關(guān)系映射
ORM(Object Relational Mapping)是通過使用描述對象和數(shù)據(jù)庫之間映射的元數(shù)據(jù),將程序中的對象自動(dòng)持久化到關(guān)系數(shù)據(jù)庫中袖瞻。
在業(yè)務(wù)邏輯層和用戶界面層中司致,我們是面向?qū)ο蟮摹.?dāng)對象信息發(fā)生變化的時(shí)候聋迎,我們需要把對象的信息保存在關(guān)系數(shù)據(jù)庫中脂矫。ORM解決的主要問題是對象關(guān)系的映射。域模型和關(guān)系模型分別是建立在概念模型的基礎(chǔ)上的霉晕。域模型是面向?qū)ο蟮耐ピ伲P(guān)系模型是面向關(guān)系的捞奕。一般情況下,一個(gè)持久化類和一個(gè)表對應(yīng)拄轻,類的每個(gè)實(shí)例對應(yīng)表中的一條記錄颅围,類的每個(gè)屬性對應(yīng)表的每個(gè)字段。
1.2.2恨搓、MTV模式對應(yīng)到Django中的文件
2院促、Django怎么用
2.1、創(chuàng)建項(xiàng)目
?pythoon django-admin startproject guest ? ? ?#創(chuàng)建guest項(xiàng)目
創(chuàng)建完成后奶卓,自動(dòng)生成以下幾個(gè)文件
a一疯、guest/__init__.py:
一個(gè)空的文件撼玄,用它來標(biāo)識一個(gè)目錄為Python的標(biāo)準(zhǔn)包(如果__init__.py不存在夺姑,這個(gè)目錄就僅僅是一個(gè)目錄,而不是一個(gè)包掌猛,它就不能被導(dǎo)入或者包含其它的模塊和嵌套包盏浙。可以為空)
b荔茬、guest/settings.py:
Django項(xiàng)目的配置文件废膘,包括Django模塊應(yīng)用配置,數(shù)據(jù)庫配置慕蔚,模板配置等
c丐黄、guest/urls.py:
Django項(xiàng)目的URL聲明,在URL請求和處理該請求的視圖函數(shù)之間建立一個(gè)對應(yīng)關(guān)系(一份由 Django 驅(qū)動(dòng)的網(wǎng)站"目錄"孔飒。決定127.0.0.1:8000后面可以接哪些內(nèi)容)
urls.py的工作原理:瀏覽器發(fā)送請求URL灌闺,服務(wù)器根據(jù)請求的URL,在項(xiàng)目所在的所有應(yīng)用的urls.py配置文件中進(jìn)行查找坏瞄,如果能匹配到該URL桂对,就會將該URL交給其對應(yīng)的視圖函數(shù)進(jìn)行處理。負(fù)責(zé)處理該URL的視圖函數(shù)鸠匀,會搜集一些業(yè)務(wù)數(shù)據(jù)蕉斜,然后把這些數(shù)據(jù),通過return render(request,'模板文件‘’)
d缀棍、guest/wsgi.py:
服務(wù)器網(wǎng)關(guān)接口宅此,為WSGI兼容的Web服務(wù)器服務(wù)項(xiàng)目的切入點(diǎn)
e、manage.py:
一個(gè)命令行工具爬范,可以讓你在使用Django項(xiàng)目時(shí)以不同的方式進(jìn)行交互
2.2诽凌、創(chuàng)建應(yīng)用
進(jìn)入manage.py所在的目錄,運(yùn)行 ?python manage.py startapp sign ? #創(chuàng)建sign應(yīng)用
創(chuàng)建完成后生成以下文件:
a坦敌、migrations/:
用于記錄models中數(shù)據(jù)的變更
b侣诵、__init__.py
c痢法、admin.py:
映射models中的數(shù)據(jù)到Django自帶的admin后臺,因此無須自行編寫后臺管理模塊
d杜顺、apps.py:
用于應(yīng)用程序的配置
e财搁、models.py:
創(chuàng)建應(yīng)用程序數(shù)據(jù)表模型(對應(yīng)數(shù)據(jù)庫的相關(guān)操作)
f、tests.py:
創(chuàng)建Django測試
g躬络、views.py:
控制向前端顯示哪些數(shù)據(jù)
2.2.1尖奔、project與app的區(qū)別
一個(gè)project包含很多個(gè)Django app以及對它們的配置
技術(shù)上,project的作用是提供配置文件穷当,比方說哪里定義數(shù)據(jù)庫連接信息, 安裝的app列表提茁,TEMPLATE_DIRS,等等
一個(gè)app是一套Django功能的集合馁菜,通常包括模型和視圖茴扁,按Python的包結(jié)構(gòu)的方式存在(app的一個(gè)關(guān)鍵點(diǎn)是它們是很容易移植到其他project和被多個(gè)project復(fù)用)
即:project的配置構(gòu)成了一個(gè)全局的運(yùn)行平臺,各個(gè)APP都運(yùn)行在這個(gè)全局的運(yùn)行平臺上汪疮,而APP代表的是一個(gè)相對獨(dú)立的功能模塊峭火,所以程序的邏輯都在APP中
2.3、運(yùn)行項(xiàng)目
Django已經(jīng)提供了web容器智嚷,通過“runserver”命令即可運(yùn)行
python manage.py runserver (默認(rèn)為本機(jī)的8000端口啟動(dòng))
或指定IP地址與端口號啟動(dòng) ?python manage.py runserver 127.0.0.1: 8001
打開瀏覽器卖丸,若能成功訪問 http://127.0.0.1,則說明成功運(yùn)行
2.4盏道、頁面中打印hello Django
a稍浆、配置guest/settings.py文件,將sign應(yīng)用添加到項(xiàng)目中
b猜嘱、在guest/urls.py文件中衅枫,導(dǎo)入sign應(yīng)用的views,并添加index/路徑配置
c泉坐、在sign/views.py文件中为鳄,添加index函數(shù)
d、創(chuàng)建templates文件腕让,并在其中創(chuàng)建一個(gè)index.html的網(wǎng)頁(很奇怪的是孤钦,在這里我將templates文件創(chuàng)建在sign文件下,但是網(wǎng)頁實(shí)際訪問的是Django安裝目錄下已存在的templates文件下的文件纯丸,所以最開始頁面報(bào)錯(cuò)偏形,提示源文件不存在)
e、運(yùn)行項(xiàng)目 并打開瀏覽器訪問http://127.0.0.1:8000/index觉鼻,即可訪問index.html頁面
Django工作流如下
參考:
www.zhihu.com/question/26235428
blog.csdn.net/acs713/article/details/40651457
www.cnblogs.com/wgbs25673578/p/5140482.html
muilpin.blog.163.com/blog/static/16538293620121212481865/
《Python web接口開發(fā)與測試》