django的請求生命週期

1.當用戶在瀏覽器中輸入url時,瀏覽器會生成請求頭和請求體發給服務端

請求頭和請求體中會包含瀏覽器的動作(action),這個動作通常爲get或者post,體現在url之中.

2.url經過Django中的wsgi,再經過Django的中間件,最後url到過路由映射表,在路由中一條一條進行匹配,

一旦其中一條匹配成功就執行對應的視圖函數,後面的路由就不再繼續匹配了.

3.視圖函數根據客戶端的請求查詢相應的數據.返回給Django,然後Django把客戶端想要的數據做爲一個字符串返回給客戶端.

4.客戶端瀏覽器接收到返回的數據,經過渲染後顯示給用戶.

視圖函數根據客戶端的請求查詢相應的數據後.如果同時有多個客戶端同時發送不同的url到服務端請求數據

服務端查詢到數據後,怎麼知道要把哪些數據返回給哪個客戶端呢??

因此客戶端發到服務端的url中還必須要包含所要請求的數據信息等內容.

例如,http://www.aaa.com/index/?nid=user這個url中,
客戶端通過get請求向服務端發送的nid=user的請求,服務端可以通過request.GET.get(“nid”)的方式取得nid數據

客戶端還可以通過post的方式向服務端請求數據.

當客戶端以post的方式向服務端請求數據的時候,請求的數據包含在請求體裏,這時服務端就使用request.POST的方式取得客戶端想要取得的數據

需要注意的是,request.POST是把請求體的數據轉換一個字典,請求體中的數據默認是以字符串的形式存在的.

第一步:瀏覽器發起請求
第二步:WSGI創建socket服務端,接收請求(Httprequest)
第三步:中間件處理請求
第四步:url路由,根據當前請求的URL找到視圖函數
第五步:view視圖,進行業務處理(ORM處理數據,從數據庫取到數據返回給view視圖;view視圖將數據渲染到template模板;將數據返回)
第六步:中間件處理響應
第七步:WSGI返回響應(HttpResponse)
第八步:瀏覽器渲染

FBV和CBV

(1)FBV
FBV(function base views) 就是在視圖裏使用函數處理請求。

FBV方式請求的過程:

用戶發送url請求,Django會依次遍歷路由映射表中的所有記錄,一旦路由映射表其中的一條匹配成功了,就執行視圖函數中對應的函數名

(2)CBV
CBV(class base views) 就是在視圖裏使用類處理請求。

CBV方式請求的過程:

當服務端使用cbv模式的時候,用戶發給服務端的請求包含url和method,這兩個信息都是字符串類型;

服務端通過路由映射表匹配成功後會自動去找dispatch方法,然後Django會通過dispatch反射的方式找到類中對應的方法並執行;

類中的方法執行完畢之後,會把客戶端想要的數據返回給dispatch方法,由dispatch方法把數據返回經客戶端。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章