1.1Django簡介
Django簡介
Django
: 發音為 [ `dʒæŋɡəʊ ]. 名稱來源於比利時爵士音樂家 Django ReinhardtPython
語言寫的開源web開發框架, 發布於2005年7月.Django
的主要目的是簡便、快速的開發數據庫驅動的網站.Django
強調代碼復用, 多個組件可以很方便的以“插件”
形式服務於整個框架. 有許多功能強大的第三方插件.Django
遵循MVC
設計模式. 但是有一個專有名詞 :MVT
MVC介紹
MVC
全拼為Model-View-Controller
MVC
核心思想 : 解耦- 讓不同的模塊之間降低耦合, 增強代碼的可擴展性和可移植性, 實現更好的向后續版本的兼容
- 開發原則 : 高內聚, 低耦合
MVC
解析M
全拼為Model
, 主要封裝對數據庫層的訪問, 內嵌ORM框架, 實現面向對象的編程來操作數據庫.V
全拼為View
, 用於封裝結果, 內嵌了模板引擎, 實現動態展示數據.C
全拼為Controller
, 用於接收GET或POST請求, 處理業務邏輯, 與Model和View交互, 返回結果.
- 當前主流的開發語言如
Java、PHP、Python、...
中都有MVC
設計模式.MVT介紹
MVT
全拼為Model-View-Template
MVT
核心思想 : 解耦MVT
解析M (模型)
全拼為Model
, 與MVC中的M功能相同, 負責數據處理, 內嵌了ORM框架.V (視圖)
全拼為View
, 與MVC中的C功能相同, 接收HttpRequest, 業務處理,返回HttpResponse.T (模板)
全拼為Template
, 與MVC中的V功能相同, 負責封裝構造要返回的html, 內嵌了模板引擎.
MVT和MVC
差異就在於黑箭頭標識出來的部分.
總結
學習 Django, 重點就是研究
Model-View-Template
三個模塊間如何協同工作及各自模塊的代碼如何編寫。補充
設計模式
- 設計模式:是一套被反復使用、多數人知曉的、經過分類的、代碼設計經驗的總結。
- 使用設計模式的目的:為了代碼可重用性、讓代碼更容易被他人理解、保證代碼可靠性。
- 設計模式使代碼編寫真正工程化。
- 設計模式是軟件工程的基石脈絡,如同大廈的結構一樣。
高內聚,低耦合
-
耦合性:指軟件系統結構中各模塊間相互聯系緊密程度的一種度量。
- 模塊之間聯系越緊密,其耦合性就越強,模塊的獨立性則越差。
- 模塊間耦合高低取決於模塊間接口的復雜性、調用的方式及傳遞的信息
-
內聚性:指模塊的功能強度的度量,即一個模塊內部各個元素彼此結合的緊密程度的度量。
- 若一個模塊內各元素(語名之間、程序段之間)聯系的越緊密,則它的內聚性就越高。
1.2虛擬環境
為什么要搭建虛擬環境?
-
在開發過程中, 當需要使用
python
的某些工具包/框架時需要聯網安裝-
比如聯網安裝Django框架
django1.8.2
版本sudo pip install django==1.8.2
-
- 提示:使用如上命令, 會將
django1.8.2
安裝到/usr/local/lib/python版本/dist-packages
路徑下 - 問題 : 如果在一台電腦上, 想開發多個不同的項目, 需要用到同一個包的不同版本, 如果使用上面的命令, 在同一個目錄下安裝或者更新, 新版本會覆蓋以前的版本, 其它的項目就無法運行了.
- 解決方案 :
虛擬環境
- 作用 :
虛擬環境
可以搭建獨立的python運行環境
, 使得單個項目的運行環境與其它項目互不影響. - 所有的
虛擬環境
都位於/home/
下的隱藏目錄.virtualenvs
下
- 作用 :
如何搭建虛擬環境?
-
安裝虛擬環境的命令 :
sudo pip install virtualenv sudo pip install virtualenvwrapper
-
創建虛擬環境的命令 :
- 提示:如果不指定python版本,默認安裝的是python2的虛擬環境
-
在python2中,創建虛擬環境
mkvirtualenv 虛擬環境名稱 例 : mkvirtualenv py_django
-
在python3中,創建虛擬環境
mkvirtualenv -p python3 虛擬環境名稱 例 : mkvirtualenv -p python3 py3_django
-
提示 :
- 創建虛擬環境需要聯網
- 創建成功后, 會自動工作在這個虛擬環境上
- 工作在虛擬環境上, 提示符最前面會出現 “虛擬環境名稱”
如何使用虛擬環境?
-
查看虛擬環境的命令 :
workon 兩次tab鍵
使用虛擬環境的命令 :
workon 虛擬環境名稱 例 :使用python2的虛擬環境 workon py_django 例 :使用python3的虛擬環境 workon py3_django
退出虛擬環境的命令 :
deactivate
刪除虛擬環境的命令 :
rmvirtualenv 虛擬環境名稱 例 :刪除虛擬環境py3_django 先退出:deactivate 再刪除:rmvirtualenv py3_django
如何在虛擬環境中安裝工具包?
-
python3版本下安裝django1.8.2的包 :
pip install 包名稱 例 : 安裝django1.8.2的包 pip install django==1.8.2
-
工具包安裝的位置 :
- python2版本下:
~/.virtualenvs/py_django/lib/python2.7/site-packages/
- python3版本下:
~/.virtualenvs/py3_django/lib/python3.5/site-packages
- python2版本下:
-
查看虛擬環境中安裝的包 :
pip freeze
-
-
-
1.3創建Django項目
- 在Django項目中, 項目的組織結構為 : 一個項目包含多個應用, 一個應用對應一個業務模塊.
- 示例 : 創建項目的名稱為
BookManager
, 創建應用名稱為Book
, 完成圖書信息
的維護. - 提示 : 在當前用戶的某個目錄下創建項目, 這樣不會發生權限問題.
創建項目
-
在
~/Desktop/.../
目錄下創建項目BookManager
例 : 在桌面創建項目 cd ~/Desktop/
-
創建項目的命令 :
-
創建好項目就可以使用
PyCharm
打開.django-admin startproject 項目名稱 例 :創建項目BookManager django-admin startproject BookManager
-
-
項目結構
BookManager
: 是與項目同名的文件, 內部包含如下項目的配置文件.init.py
: 是表示文件BookManager
可以被當作包使用.settings.py
: 是項目的整體配置文件.urls.py
: 是項目的URL
配置文件.wsgi.py
: 是項目與WSGI
兼容的Web服務器入口.
manage.py
: 是項目運行的入口, 指定配置文件路徑.
創建應用
-
在
BookManager
項目中, 創建應用Book
cd BookManager/ python manage.py startapp Book
-
項目結構
admin.py
: 是后台的站點管理注冊文件.init.py
: 是表示文件Book
可以被當作包使用.migrations
: 是做模型遷移的.models.py
: 是處理數據的.MVT
中的M
tests.py
: 是做測試用的.views.py
: 是處理業務邏輯的.MVT
中的V
選取並添加對應虛擬環境下的python
-
虛擬環境
py_django
下的pythonwhich python 結果: /home/python/.virtualenvs/py_django/bin/python
-
虛擬環境
py3_django
下的pythonwhich python 結果: /home/python/.virtualenvs/py3_django/bin/python
安裝應用
- 安裝應用前
安裝應用后
測試服務器
- 在開發階段, 為了能夠快速預覽到開發的效果,
Django
提供了一個純Python
編寫的輕量級web服務器
,- 僅在開發階段使用,非正式服務器
- 運行測試服務器的命令 :
python manage.py runserver ip:端口
python manage.py runserver 172.16.21.25:8001 對應: http://172.16.21.25:8001/
-
ip和端口號可以不寫, 默認ip為
127.0.0.1
;端口號為8000
.python manage.py runserver 對應: http://127.0.0.1:8000/
-
提示:如果項目的虛擬環境由
py3_django
切換到py_django
時,需要同時切換測試服務器的虛擬環境到py_django
-
輸入
http://127.0.0.1:8000/
即可訪問.- 刷新網頁就可以查看每次代碼執行效果
- 如果
增加代碼、修改代碼、刪除代碼
服務器會自動重啟. -
按
ctrl+c
停止服務器
-
- 在開發階段, 為了能夠快速預覽到開發的效果,
1.4模型
- 當前項目的開發, 都是數據驅動的。
-
以下為書籍信息管理的數據關系:書籍和人物是 :一對多關系
-
要先分析出項目中所需要的數據, 然后設計數據庫表.
書籍信息表
字段名 字段類型 字段說明 id AutoField 主鍵 name CharField 書名 id name 1 西游記 2 三國演義 人物信息表
字段名 字段類型 字段說明 id AutoField 主鍵 name CharField 人名 gender BooleanField 性別 book ForeignKey 外鍵 id name gender book 1 孫悟空 False 西游記 2 白骨精 True 西游記 3 曹操 False 三國演義 4 貂蟬 True 三國演義 使用Django進行數據庫開發的提示 :
MVT
設計模式中的Model
, 專門負責和數據庫交互.對應(models.py)
- 由於
Model
中內嵌了ORM框架
, 所以不需要直接面向數據庫編程. - 而是定義模型類, 通過
模型類和對象
完成數據庫表的增刪改查
. ORM框架
就是把數據庫表的行與相應的對象建立關聯, 互相轉換.使得數據庫的操作面向對象.
使用Django進行數據庫開發的步驟 :
- 定義模型類
- 模型遷移
- 操作數據庫
1. 定義模型類
- 根據書籍表結構設計模型類:
- 模型類:BookInfo
- 書籍名稱字段:name
- 根據人物表結構設計模型類:
- 模型類:PeopleInfo
- 人物姓名字段:name
- 人物性別字段:gender
- 外鍵約束:book
- 外鍵要指定所屬的模型類
book = models.ForeignKey(BookInfo)
- 外鍵要指定所屬的模型類
- 說明 :
- 書籍-人物的關系為一對多. 一本書中可以有多個英雄.
- 不需要定義主鍵字段, 在生成表時會自動添加, 並且值為自增長.
-
根據數據庫表的設計
-
在
models.py
中定義模型類,繼承自models.Model
from django.db import models # 准備書籍列表信息的模型類 class BookInfo(models.Model): # 創建字段,字段類型... name = models.CharField(max_length=10) # 准備人物列表信息的模型類 class PeopleInfo(models.Model): name = models.CharField(max_length=10) gender = models.BooleanField() # 外鍵約束:人物屬於哪本書 book = models.ForeignKey(BookInfo) # 模型類准備好之后,需要創建和執行遷移==建表
-
2. 模型遷移 (建表)
-
遷移由兩步完成 :
- 生成遷移文件:根據模型類生成創建表的語句
python manage.py makemigrations
- 執行遷移:根據第一步生成的語句在數據庫中創建表
python manage.py migrate
- 生成遷移文件:根據模型類生成創建表的語句
-
遷移前
-
遷移后
-
提示:默認采用
sqlite3
數據庫來存儲數據
3. 操作數據庫
- 通過
模型類和對象
完成數據庫表的增刪改查
. - 進入項目的
shell
, 進行簡單的增刪改查
API
操作.- 按
ctrl+d
或輸入quit()
可以退出shell
.python manage.py shell
- 按
-
測試
增刪改查
API
操作# 引入應用中的模型類 from Book.models import * # 創建書籍模型對象 book = BookInfo() # 新增記錄 book.name = 'xiyouji' # 保存記錄 book.save() # 查詢記錄 BookInfo.objects.all() # 刪除記錄 : 再查詢時,表里數據為空 book.delete() # 創建人物模型對象 people = PeopleInfo() people.name = 'sunwukong' people.gender = True people.book = book people.save() # 外鍵查詢 : 查詢書里面保存的人物信息(peopleinfo_set是隱式生成的) book.peopleinfo_set.all() # 退出shell quit()
-
-