Django路由層的匹配
前日內容回顧
-
靜態檔案的配置
頁面中不需要經常修改的內容(樣式、指令碼、圖片等)採用靜態檔案的方式儲存,需要在Django的配置檔案中註冊相應的檔案地址。
-
request物件方法
request是客戶端訪問服務端需要傳送的一系列資訊。request兩個重要引數:action及method。
action是客戶端傳送請求的地址,不寫預設為當前頁面。
method是傳送請求的分類,一種是索要資料(get),另一種是給予資料(post)。
-
pycharm連線MySQL
選擇database,下載相關驅動,即可訪問MySQL資料庫。
-
Django連線MySQL
Django預設使用sqlite3資料庫,容量和功能較少,僅用於基礎測試。
Django使用MySQL資料庫需要在settings中的database的預設值,修改ENGINE對應值,並填入資料庫名、地址、埠、使用者民、密碼等。
Django連線MySQL需要安裝MySQL客戶端,使用 pip install mysqlclient 命令列安裝。
-
Django模型層簡介
模型層主要是存放操作資料庫的方法。Django操作資料庫一般通過ORM(Object Relational Mapping,物件關係對映)操作,通過封裝固定的語句與SQL語句的對應關係,實現ORM語句操作資料庫。
注意在Django中修改了資料庫的相關的程式碼之後都需要進行資料的遷移,遷移是為了保證ORM語句執行。
今日內容概要
- Django請求生命週期
-
Django路由層的匹配
- 普通匹配
- 動態匹配
- 反向解析
今日內容詳細
Django請求生命週期
與一條請求相關的模組有以下幾部分:
- 網路服務介面框架,該框架會對請求進行封裝,然後基於網路傳送;
- 跨站請求偽造檢驗,該模組會對請求進行檢驗,確保安全性之後傳送給下一層級;
- 路由層,分析請求想要訪問的頁面,呼叫相關的功能函式;
- 檢視層,處理請求,與模板層和模型層互動,返回處理完成的資料;
- 模板層,接收檢視層關於頁面的請求,返回相關頁面;
- 模型層,接收檢視層關於資料處理的請求,返回處理結果。
Django路由層的匹配
普通匹配
普通匹配即靜態匹配,匹配指定的字串,當沒有匹配結果時,報404錯誤。
匹配時不會匹配"?"後傳的額外引數。
預設網址以"/"結尾,當首次匹配檢測到網址沒有以"/"結尾時,會自動進行重定向操作,加上"/"再次匹配。
動態匹配
動態匹配包含兩種形式,一種是轉換器匹配,另一種是正則匹配。
轉換器匹配
轉換器匹配就是將網址中兩個斜槓之間的字串轉換成指定資料格式,放入請求中傳送給後端,在呼叫相關功能時作為關鍵字引數傳入。使用格式為,<轉換器名: 資料命名>。
轉換器有五種:
str 匹配除路徑分隔符外的任意非空字串。
int 匹配0或者任意正整數。
slug 匹配任意一個由字母或數字組成的字串。
uuid 匹配格式化後的UUID。
path 匹配完整的URL路徑。
正則匹配 re_path
正則匹配就是在路由層匹配時用正則表示式代替固定的網址。一旦匹配到滿足正則的資料就會執行對應功能。
若對正則匹配進行分組,則會將匹配結果作為引數傳給後端。正則匹配的分組分為有名分組及無名分組,一條正則表示式中需要統一有名或無名。
有名分組 在分組時為分的組定義對應的名字,在傳參時使用關鍵字傳參。
無名分組 在分組時不定義名字,在傳參時使用位置傳參。
反向解析
由於動態匹配的結果多種多樣,而對應的介面可能只有一個,因此需要使用動態解析為多個需要使用相同檢視的路由匹配結果指定統一的檢視介面。具體使用方法為:
在路由層匹配網址時,為對應檢視功能定義指定的名字;
在頁面上使用模板語法{% url '功能名' '引數' %};
在後端返回路由時使用 reverse('功能名',args=())