Django簡介
-
Django
: 發(fā)音為 [ `d???ɡ?? ]. 名稱來源于比利時爵士音樂家 Django Reinhardt -
Python
語言寫的開源web開發(fā)框架, 發(fā)布于2005年7月. -
Django
的主要目的是簡便钳恕、快速的開發(fā)數(shù)據(jù)庫驅(qū)動的網(wǎng)站. -
Django
強調(diào)代碼復(fù)用, 多個組件可以很方便的以“插件”
形式服務(wù)于整個框架. 有許多功能強大的第三方插件. -
Django
遵循MVC
設(shè)計模式. 但是有一個專有名詞 :MVT
- Django官方網(wǎng)站
- Django源碼-GitHub
- Django中文文檔
MVC介紹
-
MVC
全拼為Model-View-Controller
-
MVC
核心思想 : 解耦- 讓不同的模塊之間降低耦合, 增強代碼的可擴展性和可移植性, 實現(xiàn)更好的向后續(xù)版本的兼容
- 開發(fā)原則 : 高內(nèi)聚, 低耦合
-
MVC
解析-
M
全拼為Model
, 主要封裝對數(shù)據(jù)庫層的訪問, 內(nèi)嵌ORM框架, 實現(xiàn)面向?qū)ο蟮木幊虂聿僮鲾?shù)據(jù)庫. -
V
全拼為View
, 用于封裝結(jié)果, 內(nèi)嵌了模板引擎, 實現(xiàn)動態(tài)展示數(shù)據(jù). -
C
全拼為Controller
, 用于接收GET或POST請求, 處理業(yè)務(wù)邏輯, 與Model和View交互, 返回結(jié)果.
-
- 當(dāng)前主流的開發(fā)語言如
Java、PHP榆纽、Python躺率、...
中都有MVC
設(shè)計模式.
MVT介紹
-
MVT
全拼為Model-View-Template
-
MVT
核心思想 : 解耦 -
MVT
解析-
M (模型)
全拼為Model
, 與MVC中的M功能相同, 負(fù)責(zé)數(shù)據(jù)處理, 內(nèi)嵌了ORM框架. -
V (視圖)
全拼為View
, 與MVC中的C功能相同, 接收HttpRequest, 業(yè)務(wù)處理材部,返回HttpResponse. -
T (模板)
全拼為Template
, 與MVC中的V功能相同, 負(fù)責(zé)封裝構(gòu)造要返回的html, 內(nèi)嵌了模板引擎.
-
-
MVT和MVC
差異就在于黑箭頭標(biāo)識出來的部分.
總結(jié)
學(xué)習(xí) Django, 重點就是研究
Model-View-Template
三個模塊間如何協(xié)同工作及各自模塊的代碼如何編寫妒峦。
補充
設(shè)計模式
- 設(shè)計模式:是一套被反復(fù)使用寝贡、多數(shù)人知曉的扒披、經(jīng)過分類的、代碼設(shè)計經(jīng)驗的總結(jié)圃泡。
- 使用設(shè)計模式的目的:為了代碼可重用性碟案、讓代碼更容易被他人理解、保證代碼可靠性洞焙。
- 設(shè)計模式使代碼編寫真正工程化蟆淀。
- 設(shè)計模式是軟件工程的基石脈絡(luò)拯啦,如同大廈的結(jié)構(gòu)一樣。
高內(nèi)聚熔任,低耦合
-
耦合性:指軟件系統(tǒng)結(jié)構(gòu)中各模塊間相互聯(lián)系緊密程度的一種度量褒链。
- 模塊之間聯(lián)系越緊密,其耦合性就越強疑苔,模塊的獨立性則越差甫匹。
- 模塊間耦合高低取決于模塊間接口的復(fù)雜性、調(diào)用的方式及傳遞的信息
-
內(nèi)聚性:指模塊的功能強度的度量惦费,即一個模塊內(nèi)部各個元素彼此結(jié)合的緊密程度的度量兵迅。
- 若一個模塊內(nèi)各元素(語名之間、程序段之間)聯(lián)系的越緊密薪贫,則它的內(nèi)聚性就越高恍箭。
虛擬環(huán)境
為什么要搭建虛擬環(huán)境?
-
在開發(fā)過程中, 當(dāng)需要使用
python
的某些工具包/框架時需要聯(lián)網(wǎng)安裝- 比如聯(lián)網(wǎng)安裝Django框架
django1.8.2
版本
- 比如聯(lián)網(wǎng)安裝Django框架
提示:使用如上命令, 會將
django1.8.2
安裝到/usr/local/lib/python版本/dist-packages
路徑下問題 : 如果在一臺電腦上, 想開發(fā)多個不同的項目, 需要用到同一個包的不同版本, 如果使用上面的命令, 在同一個目錄下安裝或者更新, 新版本會覆蓋以前的版本, 其它的項目就無法運行了.
-
解決方案 :
虛擬環(huán)境
-
作用 :
虛擬環(huán)境
可以搭建獨立的python運行環(huán)境
, 使得單個項目的運行環(huán)境與其它項目互不影響. - 所有的
虛擬環(huán)境
都位于/home/
下的隱藏目錄.virtualenvs
下
-
作用 :
如何搭建虛擬環(huán)境?
-
安裝虛擬環(huán)境的命令 :
sudo pip install virtualenv sudo pip install virtualenvwrapper
-
創(chuàng)建虛擬環(huán)境的命令 :
- 提示:如果不指定python版本,默認(rèn)安裝的是python2的虛擬環(huán)境
- 在python2中瞧省,創(chuàng)建虛擬環(huán)境
mkvirtualenv 虛擬環(huán)境名稱 例 : mkvirtualenv py_django
- 在python3中扯夭,創(chuàng)建虛擬環(huán)境
mkvirtualenv -p python3 虛擬環(huán)境名稱 例 : mkvirtualenv -p python3 py3_django
創(chuàng)建虛擬環(huán)境py3
-
提示 :
- 創(chuàng)建虛擬環(huán)境需要聯(lián)網(wǎng)
- 創(chuàng)建成功后, 會自動工作在這個虛擬環(huán)境上
- 工作在虛擬環(huán)境上, 提示符最前面會出現(xiàn) “虛擬環(huán)境名稱”
如何使用虛擬環(huán)境?
-
查看虛擬環(huán)境的命令 :
workon 兩次tab鍵
查看虛擬環(huán)境
- 使用虛擬環(huán)境的命令 :
workon 虛擬環(huán)境名稱 例 :使用python2的虛擬環(huán)境 workon py_django 例 :使用python3的虛擬環(huán)境 workon py3_django
使用虛擬環(huán)境py3
- 退出虛擬環(huán)境的命令 :
deactivate
- 刪除虛擬環(huán)境的命令 :
rmvirtualenv 虛擬環(huán)境名稱 例 :刪除虛擬環(huán)境py3_django 先退出:deactivate 再刪除:rmvirtualenv py3_django
如何在虛擬環(huán)境中安裝工具包?
- python3版本下安裝django1.8.2的包 :
pip install 包名稱 例 : 安裝django1.8.2的包 pip install django==1.8.2
安裝django在py3
-
工具包安裝的位置 :
- python2版本下:
~/.virtualenvs/py_django/lib/python2.7/site-packages/
- python3版本下:
~/.virtualenvs/py3_django/lib/python3.5/site-packages
- python2版本下:
-
查看虛擬環(huán)境中安裝的包 :
pip freeze
查看虛擬環(huán)境下安裝的包
創(chuàng)建Django項目
- 在Django項目中,項目的組織結(jié)構(gòu)為:一個項目包含多個應(yīng)用鞍匾,一個應(yīng)用對應(yīng)一個業(yè)務(wù)模塊交洗。
-
示例:創(chuàng)建項目的名稱為
BookManager
,創(chuàng)建應(yīng)用名稱為Book
橡淑,完成圖書信息
的維護构拳。 - 提示:在當(dāng)前用戶的某個目錄下創(chuàng)建項目,這樣不會發(fā)生權(quán)限問題梁棠。
創(chuàng)建項目
-
在
~/Desktop/.../
目錄下創(chuàng)建項目BookManager
例 : 在桌面創(chuàng)建項目 cd ~/Desktop/
-
創(chuàng)建項目的命令:
- 創(chuàng)建好項目就可以使用
PyCharm
打開置森。django-admin startproject 項目名稱 例 :創(chuàng)建項目BookManager django-admin startproject BookManager
- 創(chuàng)建好項目就可以使用
-
項目結(jié)構(gòu)
項目結(jié)構(gòu).png-
BookManager
:是與項目同名的文件,內(nèi)部包含如下項目的配置文件掰茶。-
init.py
:是表示文件BookManager
可以被視為包使用暇藏。 -
settings.py
:是項目的整體配置文件。 -
urls.py
:是項目的URL
配置文件濒蒋。 -
wsgi.py
:是項目與WSGI
兼容的Web服務(wù)器入口盐碱。
-
-
manage.py
:是項目運行的入口,指定配置文件路徑沪伙。
-
創(chuàng)建應(yīng)用
-
在
BookManager
項目中瓮顽,創(chuàng)建應(yīng)用Book
cd BookManager/ python manage.py startapp Book
-
項目結(jié)構(gòu)
創(chuàng)建應(yīng)用-
admin.py
:是后臺的站點管理注冊文件。 -
init.py
:是表示文件Book
可以被視為包使用围橡。 -
migrations
:是做模型遷移的暖混。 -
models.py
:是處理數(shù)據(jù)的。MVT
中的M
-
tests.py
:是做測試用的翁授。 -
views.py
:是處理業(yè)務(wù)邏輯的拣播。MVT
中的V
-
選擇并添加對應(yīng)虛擬環(huán)境下的python
- 虛擬環(huán)境
py_django
下的pythonwhich python 結(jié)果: /home/python/.virtualenvs/py_django/bin/python
- 虛擬環(huán)境
py3_django
下的pythonwhich python 結(jié)果: /home/python/.virtualenvs/py3_django/bin/python

安裝應(yīng)用
-
安裝應(yīng)用前
安裝應(yīng)用前 -
安裝應(yīng)用后
安裝應(yīng)用后.png
測試服務(wù)器
-
在開發(fā)階段晾咪,為了能夠快速預(yù)覽到開發(fā)的效果,
Django
提供一個純Python
編寫的輕量級web服務(wù)器
贮配,- 僅在開發(fā)階段使用谍倦,非正式服務(wù)器
-
運行測試服務(wù)器的命令:
python manage.py runserver ip:端口
python manage.py runserver 172.16.21.25:8001 對應(yīng): http://172.16.21.25:8001/
-
ip和端口號可以不寫,默認(rèn)ip為
127.0.0.1
泪勒;端口號為8000
昼蛀。python manage.py runserver 對應(yīng): http://127.0.0.1:8000/
終端開啟測試服務(wù)器 提示:如果項目的虛擬環(huán)境由
py3_django
切換到py_django
時,需要同時切換測試服務(wù)器的虛擬環(huán)境到py_django
-
輸入
http://127.0.0.1:8000/
即可訪問圆存。- 刷新網(wǎng)頁就可以查看每次代碼執(zhí)行效果
- 如果
增加代碼叼旋、修改代碼、刪除代碼
服務(wù)器會自動重啟沦辙。 - 按
ctrl+c
停止服務(wù)器
瀏覽器訪問服務(wù)器.png
模型
- 當(dāng)前項目的開發(fā), 都是數(shù)據(jù)驅(qū)動的夫植。
- 以下為書籍信息管理的數(shù)據(jù)關(guān)系:書籍和人物是 :一對多關(guān)系
- 要先分析出項目中所需要的數(shù)據(jù), 然后設(shè)計數(shù)據(jù)庫表.
書籍信息表
字段名 | 字段類型 | 字段說明 |
---|---|---|
id | AutoField | 主鍵 |
name | CharField | 書名 |
id | name |
---|---|
1 | 西游記 |
2 | 三國演義 |
人物信息表
字段名 | 字段類型 | 字段說明 |
---|---|---|
id | AutoField | 主鍵 |
name | CharField | 人名 |
gender | BooleanField | 性別 |
book | ForeignKey | 外鍵 |
id | name | gender | book |
---|---|---|---|
1 | 孫悟空 | False | 1 |
2 | 白骨精 | True | 1 |
3 | 曹操 | False | 2 |
4 | 貂蟬 | True | 2 |
使用Django進行數(shù)據(jù)庫開發(fā)的提示 :
-
MVT
設(shè)計模式中的Model
, 專門負(fù)責(zé)和數(shù)據(jù)庫交互.對應(yīng)(models.py)
- 由于
Model
中內(nèi)嵌了ORM框架
, 所以不需要直接面向數(shù)據(jù)庫編程. - 而是定義模型類, 通過
模型類和對象
完成數(shù)據(jù)庫表的增刪改查
. -
ORM框架
就是把數(shù)據(jù)庫表的行與相應(yīng)的對象建立關(guān)聯(lián), 互相轉(zhuǎn)換.使得數(shù)據(jù)庫的操作面向?qū)ο?
使用Django進行數(shù)據(jù)庫開發(fā)的步驟 :
- 定義模型類
- 模型遷移
- 操作數(shù)據(jù)庫
1. 定義模型類
-
根據(jù)書籍表結(jié)構(gòu)設(shè)計模型類:
- 模型類:BookInfo
- 書籍名稱字段:name
-
根據(jù)人物表結(jié)構(gòu)設(shè)計模型類:
- 模型類:PeopleInfo
- 人物姓名字段:name
- 人物性別字段:gender
- 外鍵約束:book
- 外鍵要指定所屬的模型類
book = models.ForeignKey(BookInfo)
- 外鍵要指定所屬的模型類
-
說明 :
- 書籍-人物的關(guān)系為一對多. 一本書中可以有多個英雄.
- 不需要定義主鍵字段, 在生成表時會自動添加, 并且值為自增長.
-
根據(jù)數(shù)據(jù)庫表的設(shè)計
- 在
models.py
中定義模型類,繼承自models.Model
from django.db import models # 準(zhǔn)備書籍列表信息的模型類 class BookInfo(models.Model): # 創(chuàng)建字段杀饵,字段類型... name = models.CharField(max_length=10) # 準(zhǔn)備人物列表信息的模型類 class PeopleInfo(models.Model): name = models.CharField(max_length=10) gender = models.BooleanField() # 外鍵約束:人物屬于哪本書 book = models.ForeignKey(BookInfo) # 模型類準(zhǔn)備好之后瘾敢,需要創(chuàng)建和執(zhí)行遷移==建表
- 在
2. 模型遷移 (建表)
-
遷移由兩步完成 :
- 生成遷移文件:根據(jù)模型類生成創(chuàng)建表的語句
python manage.py makemigrations
- 執(zhí)行遷移:根據(jù)第一步生成的語句在數(shù)據(jù)庫中創(chuàng)建表
python manage.py migrate
- 生成遷移文件:根據(jù)模型類生成創(chuàng)建表的語句
-
遷移前
遷移前.png
-
遷移后
遷移后.png 提示:默認(rèn)采用
sqlite3
數(shù)據(jù)庫來存儲數(shù)據(jù)
3. 操作數(shù)據(jù)庫
- 通過
模型類和對象
完成數(shù)據(jù)庫表的增刪改查
. - 進入項目的
shell
, 進行簡單的增刪改查
API
操作.- 按
ctrl+d
或輸入quit()
可以退出shell
.python manage.py shell
- 按
- 測試
增刪改查
API
操作# 引入應(yīng)用中的模型類 from Book.models import * # 創(chuàng)建書籍模型對象 book = BookInfo() # 新增記錄 book.name = 'xiyouji' # 保存記錄 book.save() # 查詢記錄 BookInfo.objects.all() # 刪除記錄 : 再查詢時,表里數(shù)據(jù)為空 book.delete() # 創(chuàng)建人物模型對象 people = PeopleInfo() people.name = 'sunwukong' people.gender = True people.book = book people.save() # 外鍵查詢 : 查詢書里面保存的人物信息(peopleinfo_set是隱式生成的) book.peopleinfo_set.all() # 退出shell quit()
4 站點管理
-
站點 : 分為
內(nèi)容發(fā)布
和公共訪問
兩部分 - 內(nèi)容發(fā)布 的部分由網(wǎng)站的管理員負(fù)責(zé)查看、添加、修改撞羽、刪除數(shù)據(jù)
-
Django
能夠根據(jù)定義的模型類自動地生成管理模塊 - 使用
Django
的管理模塊, 需要按照如下步驟操作 :- 1.管理界面本地化
- 2.創(chuàng)建管理員
- 3.注冊模型類
- 4.發(fā)布內(nèi)容到數(shù)據(jù)庫
- 5.自定義站點管理頁面
1.管理界面本地化
- 本地化是將顯示的語言、時間等使用本地的習(xí)慣衫冻,這里的本地化就是進行中國化.
- 中國大陸地區(qū)使用
簡體中文
, 時區(qū)使用亞洲/上海時區(qū)
, 注意這里不使用北京時區(qū). - 本地化前
[圖片上傳中...(image.png-4058e4-1594127813226-0)]
- 本地化后
2.創(chuàng)建管理員
-
創(chuàng)建管理員的命令 :
python manage.py createsuperuser
-
按提示輸入用戶名诀紊、郵箱、密碼
image.png -
登陸站點 :
http://127.0.0.1:8000/admin
- 需要服務(wù)器是啟動狀態(tài)
-
登陸站點成功
- 站點界面中沒有書籍和人物管理入口,因為沒有注冊模型類
3.注冊模型類
-
在
應(yīng)用
的admin.py
文件中注冊模型類- 需要導(dǎo)入模型模塊 :
from models import *
- 需要導(dǎo)入模型模塊 :
-
注冊模型后
注冊模型成功后, 就可以在站點管理界面方便快速的管理數(shù)據(jù).
4.發(fā)布內(nèi)容到數(shù)據(jù)庫
-
發(fā)布內(nèi)容后隅俘,優(yōu)化模型類展示
class BookInfo(models.Model): """定義書籍信息模型類""" name = models.CharField(max_length=10) def __str__(self): """將模型類以字符串的方式輸出""" return self.name
5.自定義站點管理頁面
- 自定義站點管理界面前
如果想在站點界面中展示詳細(xì)的字段信息,需要自定義管理頁面
-
即 在
應(yīng)用
的admin.py
文件中需要重新注冊模型類新建類繼承自
admin.ModelAdmin
重寫
list_display
邻奠,指定需要展示的字段-
將
PeopleAdmin
注冊到站點# 自定義站點管理界面的類 : 重寫list_display屬性 class PeopleAdmin(admin.ModelAdmin): list_display = ['id','name','gender','book'] # 注冊人物模型 admin.site.register(PeopleInfo,PeopleAdmin)
-
自定義站點管理界面后
視圖和URL
- 站點管理頁面做好了, 接下來就要做
公共訪問
的頁面了. - 對于
Django
的設(shè)計框架MVT
.- 用戶在URL中請求的是視圖.
- 視圖接收請求后進行處理.
- 并將處理的結(jié)果返回給請求者.
- 使用視圖時需要進行兩步操作
- 1.定義視圖
- 2.配置URLconf
1. 定義視圖
視圖就是一個
Python
函數(shù),被定義在應(yīng)用
的views.py
中.視圖的第一個參數(shù)是
HttpRequest
類型的對象reqeust
为居,包含了所有請求信息
.視圖必須返回
HttpResponse對象
碌宴,包含返回給請求者的響應(yīng)信息
.需要導(dǎo)入
HttpResponse
模塊 :from django.http import HttpResponse
定義視圖函數(shù) : 響應(yīng)字符串
OK!
給客戶端
思考 : 如何才能讓請求找到視圖?
2. 配置URLconf
-
查找視圖的過程 :
- 1.請求者在瀏覽器地址欄中輸入URL, 請求到網(wǎng)站.
- 2.網(wǎng)站獲取URL信息.
- 3.然后與編寫好的URLconf逐條匹配.
- 4.如果匹配成功則調(diào)用對應(yīng)的視圖.
- 5.如果所有的URLconf都沒有匹配成功.則返回404錯誤.
-
URLconf
入口
-
需要兩步完成
URLconf
配置- 1.在
項目
中定義URLconf
- 2.在
應(yīng)用
中定義URLconf
- 1.在
在
項目
中定義URLconf
-
在
應(yīng)用
中定義URLconf
-
提示:一條
URLconf
包括URL規(guī)則、視圖兩部分- URL規(guī)則使用正則表達式定義.
- 視圖就是在
views.py
中定義的視圖函數(shù).
-
3. 測試:請求訪問
http://127.0.0.1:8000/
總結(jié)View和URL匹配流程
模板
思考 : 網(wǎng)站如何向客戶端返回一個漂亮的頁面呢蒙畴?
-
提示 :
- 漂亮的頁面需要
html
贰镣、css
、js
. - 可以把這一堆字段串全都寫到視圖中, 作為
HttpResponse()
的參數(shù),響應(yīng)給客戶端.
- 漂亮的頁面需要
-
問題 :
- 視圖部分代碼臃腫, 耦合度高.
- 這樣定義的字符串是不會出任何效果和錯誤的.
- 效果無法及時查看.有錯也不容易及時發(fā)現(xiàn).
-
設(shè)想 :
- 是否可以有一個專門定義前端頁面的地方, 效果可以及時展示,錯誤可以及時發(fā)現(xiàn),并且可以降低模塊間耦合度!
-
解決問題 : 模板
-
MVT
設(shè)計模式中的T
,Template
-
在
Django
中, 將前端的內(nèi)容定義在模板中, 然后再把模板交給視圖調(diào)用, 各種漂亮膳凝、炫酷的效果就出現(xiàn)了.
模板使用步驟
- 1.創(chuàng)建模板
- 2.設(shè)置模板查找路徑
- 3.模板接收視圖傳入的數(shù)據(jù)
- 4.模板處理數(shù)據(jù)
1.創(chuàng)建模板
- 在
應(yīng)用
同級目錄下創(chuàng)建模板文件夾templates
. 文件夾名稱固定寫法. - 在
templates
文件夾下, 創(chuàng)建應(yīng)用
同名文件夾. 例,Book
- 在
應(yīng)用
同名文件夾下創(chuàng)建網(wǎng)頁模板
文件. 例 :index.html
2.設(shè)置模板查找路徑
3.模板接收視圖傳入的數(shù)據(jù)
- 模板查找全路徑 :
os.path.join(BASE_DIR,'templates'+'Book/index.html'
4.模板處理數(shù)據(jù)
5. 查看模板處理數(shù)據(jù)成果
總結(jié)View-Templates流程