由django請求生命週期延伸出的知識點大總結

希希大隊長發表於2019-07-01

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協議其實是定義了一種serverapplication解耦的規範,我們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:

未完待續...

 

相關文章