Django之中介軟體

2021-08-31 21:37:45 字數 2754 閱讀 3176

django中的中介軟體(middleware),在django中,中介軟體其實就是乙個類,在請求到來和結束後,django會根據自己的規則在合適的時機執行中介軟體中相應的方法。

在django專案的settings模組中,有乙個middleware_classes變數,其中每乙個元素就是乙個中介軟體

中介軟體中一共有五個方法:

process_request(self,request)

process_view(self,request,callback,callback_args,callback_kwargs)

process_exception(self,request,exception)

process_response(self,request, response)

process_template_response(self,request,response)

只有在檢視函式的返回物件中有render方法才會執行!預設不執行

並把物件的render方法的返回值返回給使用者(注意不返回檢視函式的return的結果了,而是返回檢視函式 return值(物件)的render方法)

中介軟體之process_request,process_response

process_request(self,request)

process_response(self, request, response)

當使用者發起請求的時候回依次經過所有的中介軟體,這個時候的請求時process_request,最後到達views的函式中,views函式處理後,在依次穿過中介軟體,這個時候是process_response,最後返回給請求者

在django中叫中介軟體,其他web框架中,有的叫管道,httphandle

上述中的中介軟體都是django中的,我們也可以自己定義乙個中介軟體,我們可以自己寫乙個類,但是必須繼承middlewaremixin

所以需要匯入:from django.utils.deprecation import middlewaremixin

我們在專案檔案下建立乙個middle目錄,並在下面建立m1.py**例子如下:

print(「中介軟體1請求」)

def process_response(self,request,response):

print(「中介軟體1返回」)

return response

def process_view(self, request, callback, callback_args, callback_kwargs):

print(「中介軟體1view」)

class row2(middlewaremixin):

def process_request(self,request):

print(「中介軟體2請求」)

# return httpresponse(「走」)

def process_response(self,request,response):

print(「中介軟體2返回」)

return response

def process_view(self, request, callback, callback_args, callback_kwargs): print(「中介軟體2view」)

class row3(middlewaremixin):

def process_request(self,request):

print(「中介軟體3請求」)

def process_response(self,request,response):

print(「中介軟體3返回」)

return response

def process_view(self, request, callback, callback_args, callback_kwargs): print(「中介軟體3view」)複製**高亮部分為新增的內容,這樣執行之後效果如下:

中介軟體1請求

中介軟體2請求

中介軟體3請求

中介軟體1view

中介軟體2view

中介軟體3view

中介軟體3返回

中介軟體2返回

中介軟體1返回

如果在中間中新增了process_exception方法,工作圖示為:

這樣當使用者發起請求的時候到達中介軟體3的process_request之後會到達urls路由關係對映這裡,如果匹配到了就會到中介軟體1的process_view,然後依次傳遞到中介軟體3的process_view,到達view函式。

如果view函式中有報錯,則會從中介軟體3依次 ,這裡即中介軟體3的process_response,然後依次返回到使用者,如果沒有匹配到這個錯誤則直接在頁面顯示錯誤資訊。如果view函式中沒有錯誤,則到中間3即最後乙個中介軟體3的process_response,然後依次向上,傳到使用者

中介軟體之process_template_responseprocess

process_template_response(self,request,response)

只有當views函式中返回的物件中具有render方法,是就會直接process_template_responseprocess

Django 之 中介軟體

使用裝飾器繞過中介軟體csrf token 從全域性角度改變 django 框架的輸入和輸出 不宜過多 不宜太複雜 middleware 模組名為 mymiddlewares,類名為 md1 mymiddlewares.md1 from django.utils.deprecation import...

django之中介軟體

1 什麼是中介軟體 顧名思義中介軟體就是介於request和response處理之間的一道處理過程,相對比較輕量級,並且在全域性上改變django的輸入和輸出。因為改變的是全域性,所以需要謹慎使用,用不好反而會影響效能。如果你想修改請求,例如被傳送到view中的httprequest物件。或者你想修...

Django學習之中介軟體

1 概念 中介軟體,是介於request與response處理之間的一道處理過程,相對比較輕量級,並且在全域性上改變django的輸入 與輸出。因為改變的是全域性,所以需要謹慎實用,用不好會影響到效能。比如你想修改請求,例如被傳送到view中的httprequest物件,或者修改view返回的htt...