由django請求生命週期延伸出的知識點大總結
django專案搭建見:
https://www.cnblogs.com/dongxixi/p/10981577.html
django請求生命週期圖:
由瀏覽器發起請求開始
知識點1:
瀏覽器與伺服器軟體架構:C/S架構
HTTP協議:又稱超文字傳輸協議,它規定了瀏覽器與服務端資料傳輸的格式
HTTP協議四大特性:
基於TCP/IP作用於應用層的協議
基於請求響應
無狀態
無連線
知識點2:
請求格式及響應格式:
請求格式:
請求首行
請求頭
空行(\r\n)
請求體
響應格式:
響應首行
響應頭
空行
響應體
wsgiref請求響應處理
知識點3:web服務閘道器協議
cgi:通用閘道器協議
wsgi協議:
wsgi協議(Web Server Gateway Interface) 主要包含server和application兩部分:
WSGI server
負責從客戶端接收請求,將request
轉發給application
,將application
返回的response
返回給客戶端;-
WSGI application接收由server轉發的request,處理請求,並將處理結果返回給server。application中可以包括多個棧式的中介軟體(middlewares),這些中介軟體需要同時實現server與application,因此可以在WSGI伺服器與WSGI應用之間起調節作用:對伺服器來說,中介軟體扮演應用程式(執行程式),對應用程式來說,中介軟體扮演伺服器(WSGI伺服器)。
WSGI
協議其實是定義了一種server
與application解耦
的規範,我們django自帶的wsgiref是對該協議的具體實現
此外還有很多其他實現該協議的伺服器:
uwsgi:支援較高併發,django專案上線一般會選擇用它替換django自帶的wsgiref == JAVA中的tomcat
wsgiref:支援併發不高,django自帶
請求解析完成後依次通過Django中介軟體
知識點4:django中介軟體
django自帶七大中介軟體:可以簡單理解為django的門戶,安全認證及全域性處理都在這裡面
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]
除了django自帶的中介軟體以外我們還可以自定義中介軟體實現一些全域性的校驗和配置
方法:在應用下新建資料夾,名字自取,資料夾下新建任意py檔案,名字自取,接下來就可以在py中定義自己的中介軟體l
# 匯入MiddlewareMixin模組 from django.utils.deprecation import MiddlewareMixin #定義中介軟體的類,它繼承MiddlewareMixin class Md1(MiddlewareMixin): def process_request(self, request): print('Md1裡面的process_request') class Md2(MiddlewareMixin): def process_request(self, request): print('Md2裡面的process_request')
django暴露給開發者5種方法分別是:
process_request(self, request): #請求來的時候執行 process_response(self, request, response): #響應返回時執行 process_template_response(self, request, response): #檢視函式執行完了執行 process_view(self, request, view_func, view_args, view_kwargs): #路由匹配成功後檢視函式執行前執行 process_exception(self, request, exception): #檢視函數出錯時執行
中介軟體具體作用及執行流程詳見:https://www.cnblogs.com/dongxixi/p/11048901.html
接下來進入urls.py,路由匹配
知識點5:路由系統
urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^$',views.home), url(r'^test/$',views.test), url(r'^testadd/$',views.testadd), url(r'',views.error) ]
①路由正則匹配
②無名分組
③有名分組
④反向解析
⑤路由分發
路由系統詳見:https://www.cnblogs.com/dongxixi/p/11001722.html
路由匹配成功,進入檢視函式
知識點6:CBV/FBV
FBV:
路由層寫法:
url(r'^test/$',views.test),
檢視層寫法:
def text(request): if request.method == "POST": return HttpResponse("ok") elif request.method == "GET": return HttpResponse("ok")
CBV:
路由層寫法:
url(r'^test/$',views.Text.as_view()),
檢視層寫法:
from django.views import View class Text(View): def get(self,request): return HttpResponse("ok") def post(self,request): return HttpResponse("ok")
三板斧及jsonresponse
from django.shortcuts import render,redirect,HttpResponse from django.http import JsonResponse
CBV原始碼剖析見:
檢視函式處理資料,進行django模板渲染
知識點7:django模板層
①過濾器
②標籤
③自定義過濾器、標籤、inclusion_tag
④模板繼承與匯入
⑤靜態檔案配置
詳見:
模板層:https://www.cnblogs.com/dongxixi/p/11013803.html
補充:https://www.cnblogs.com/dongxixi/p/11007339.html
知識點8:cookie與session
①cookie基本使用
②session原理及使用
③auth模組
④自定義User表
cookie與session使用見:https://www.cnblogs.com/dongxixi/p/11048974.html
auth模組及自定義User表使用見:https://www.cnblogs.com/dongxixi/p/11055516.html
知識點9:form認證元件
①form元件使用
②form元件進階
③分頁器
form元件:https://www.cnblogs.com/dongxixi/p/11042917.html
form元件進階:https://www.cnblogs.com/dongxixi/p/11043435.html
分頁器:https://www.cnblogs.com/dongxixi/p/11042854.html
知識點10:django資料庫操作:
①一對一、一對多、多對多表分析及建立
②多對多表三種建立方式
③django ORM增刪改查、單表操作、多表操作
④F、Q查詢
⑤ORM類、欄位基礎
⑥事務、批量插入、查詢優化
表關係:https://www.cnblogs.com/dongxixi/p/10862974.html
多對多表三種建立方式:https://www.cnblogs.com/dongxixi/p/11042883.html
ORM增刪改查:https://www.cnblogs.com/dongxixi/p/11013783.html
F、Q查詢:https://www.cnblogs.com/dongxixi/p/11042869.html
ORM基礎:https://www.cnblogs.com/dongxixi/p/11050753.html
django-model進階:https://www.cnblogs.com/liuqingzheng/articles/9805991.html
知識點11:
未完待續...
&n