django中的中介軟體(middleware),在django中,中介軟體其實就是乙個類,在請求到來和結束後,django會根據自己的規則在合適的時機執行中介軟體中相應的方法。
在django專案的settings模組中,有乙個middleware_classes變數,其中每乙個元素就是乙個中介軟體
中介軟體中一共有五個方法:
process_request(self,request)只有在檢視函式的返回物件中有render方法才會執行!預設不執行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方法的返回值返回給使用者(注意不返回檢視函式的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...