官方的說法:中介軟體是乙個用來處理django的請求和響應的框架級別的鉤子。它是乙個輕量、低階別的外掛程式系統,用於在全域性範圍內改變django的輸入和輸出。每個中介軟體元件都負責做一些特定的功能。
說的直白一點中介軟體是幫助我們在檢視函式執行之前和執行之後都可以做一些額外的操作,它本質上就是乙個自定義類,類中定義了幾個方法,django框架會在請求的特定的時間去執行這些方法。
中介軟體可以定義5個方法:分別是
1 process_request(self,request)
2 process_view(self, request, view_func, view_args, view_kwargs)
3 process_template_response(self,request,response)
4 process_exception(self, request, exception)
5 process_response(self, request, response)
以上的方法返回值可以是none或乙個httpresponse物件,如果是none,則繼續按照django定義的規則
繼續向後執行,如果是httpresponse物件,則直接將該物件返回給使用者
自定義乙個中介軟體:
from django.utils.deprecation import middlewaremixin
class md1(middlewaremixin):
def process_request(self,request):
print('你真帥')
插入到settings裡面就可以了,在列表裡外掛程式是順序執行的,響應時是倒敘執行
process_request方法是在執行試圖函式之前執行的
process_response:
它有兩個引數,乙個是request,乙個是respone,response就是檢視函式返回給的httpresponse
物件。該方法的返回值也必須是httpresponse物件。
它在檢視函式之後執行,而且在setting列表裡是倒敘執行的
process_view:
process_view(self, request, view_func, view_args, view_kwargs)
該方法有四個引數
request是httprequest物件。
view_func是django即將使用的檢視函式。 (它是實際的函式物件,而不是函式的名稱作為字串。)
view_args是將傳遞給檢視的位置引數的列表.
view_kwargs是將傳遞給檢視的關鍵字引數的字典。 view_args和view_kwargs都不包含第乙個檢視引數(request)。
django會在呼叫檢視函式之前呼叫process_view方法。
它應該返回none或乙個httpresponse物件。 如果返回none,django將繼續處理這個請求,執行任何其他中介軟體的process_view方法,然後在執行相應的檢視。 如果它返回乙個httpresponse物件,django不會呼叫適當的檢視函式。 它將執行中介軟體的process_response方法並將應用到該httpresponse並返回結果。
process_exception:
如果試圖函式中無異常,process_exception方法不執行。
print("md1 中的process_exception")
如果有異常的話,process_exception會捕捉這個異常:
def process_exception(self, request, exception)
print(exception)
print("md1 中的process_exception")
process_template_response(用的比較少)
process_template_response(self, request, response)
它的引數,乙個httprequest物件,response是templateresponse物件(由檢視函式或者中介軟體產生)。
process_template_response是在檢視函式執行完成後立即執行,但是它有乙個前提條件,那就是檢視函式返回的物件有乙個render()方法(或者表明該物件是乙個templateresponse物件或等價方法)。
def process_template_response(self, request, response):
print("md1 中的process_template_response")
return response
執行順序:
先是process_request(),然後process_view(),如果這是有相應物件會直接去到process_response(),執行所有的列表(倒敘)
Django 中介軟體
django中的中介軟體是乙個輕量級 底層的外掛程式系統,可以介入django的請求和響應處理過程,修改django的輸入或輸出。中介軟體的執行過程如下圖所示 django在中介軟體中預置了五個方法,這五個方法的區別在於不同的階段執行,對輸入或輸出進行干預,方法如下 def init self pa...
Django中介軟體
給檢視函式加裝飾器判斷使用者是否登入,把沒有登入的請求跳轉到登入頁面,我們通過給幾個特定檢視函式加裝飾器實現了這個需求,但是這樣做比較繁瑣,用django中的中介軟體會比較簡潔 什麼是中介軟體 中介軟體是幫助我們再檢視函式執行之前和執行之後都可以做一些額外的操作,它本質上就是乙個自定義類,類中定義了...
Django中介軟體
什麼是中介軟體?django中的中介軟體是乙個輕量級 底層的外掛程式系統,可以介入django的請求和響應處理過程,修改django的輸入或輸出。中介軟體的設計為開發者提供了一種無侵入式的開發方式,增強了django框架的健壯性。我們可以使用中介軟體,在django處理檢視的不同階段對輸入或輸出進行...