from django.utils.deprecation import
middlewaremixin
class
m1(middlewaremixin):
defprocess_request(self, request):
print('
m1.process_request')
defprocess_response(self, request, response):
print('
m1.process_response')
return
response
class
m2(middlewaremixin):
defprocess_request(self, request):
print('
m2.process_request')
defprocess_response(self, request, response):
print('
m2.process_response')
return response
m1.process_request
m2.process_request
in views
m2.process_response
m1.process_response
from django.utils.deprecation importmiddlewaremixin
class
m1(middlewaremixin):
defprocess_request(self, request):
print('
m1.process_request')
defprocess_response(self, request, response):
print('
m1.process_response')
return
response
defprocess_view(self,request,callback,callback_args,callback_kwargs):
response =callback(request)
print('
m1.process_view')
return
response
class
m2(middlewaremixin):
defprocess_request(self, request):
print('
m2.process_request')
defprocess_response(self, request, response):
print('
m2.process_response')
return
response
defprocess_view(self,request,callback,callback_args,callback_kwargs):
response =callback(request)
print('
m2.process_view
')
m1.process_request
m2.process_request
in views
m1.process_view
process_view函式如果有返回值,則後面的process_view 函式就不會執行,也不會再進入檢視函式了,而是直接 到中介軟體的 process_response函式開始往回執行。這其實也就意味著提前在中介軟體中執行檢視函式並返回response
m2.process_response
m1.process_response
以上是django中介軟體(類)函式的執行順序。
1.當只有process_request和process_response函式時,先執行完全部中介軟體的process_request函式,然後進入檢視函式,
再往回執行全部中介軟體的process_response函式。
注意:process_request函式不可以有return值。
2.當中介軟體中除了以上兩個函式之外,還有
process_view函式(其它的待後續補充)時,會在執行完process_request函式後再從頭開始執行全部的
process_view函式,如果process_view函式沒有返回值,則按順序執行,並且會進入到檢視函式。如果有返回值,則執行完此個函式後不再執行後面的函式,
直接跳到process_response函式,不進入檢視函式。
增加另外兩個函式:
1. process_exception 檢視函式存在異常時才會在執行完檢視函式後執行,而且如果異常在某乙個中介軟體已經被處理了,那麼後面中介軟體的該函式就不再執行了。
defprocess_exception(self,request,exception):
print('
m1.process_exception')
print(exception) #輸入異常的資訊
2.process_template_response 只有當檢視函式返回的物件包含render函式時,才會執行
defprocess_template_response(self,request,response):
print('
m1.process_template_response')
return response
#檢視函式
class foo:(有點繞,但還是容易記)
Django 中介軟體
django中的中介軟體是乙個輕量級 底層的外掛程式系統,可以介入django的請求和響應處理過程,修改django的輸入或輸出。中介軟體的執行過程如下圖所示 django在中介軟體中預置了五個方法,這五個方法的區別在於不同的階段執行,對輸入或輸出進行干預,方法如下 def init self pa...
Django中介軟體
給檢視函式加裝飾器判斷使用者是否登入,把沒有登入的請求跳轉到登入頁面,我們通過給幾個特定檢視函式加裝飾器實現了這個需求,但是這樣做比較繁瑣,用django中的中介軟體會比較簡潔 什麼是中介軟體 中介軟體是幫助我們再檢視函式執行之前和執行之後都可以做一些額外的操作,它本質上就是乙個自定義類,類中定義了...
Django中介軟體
什麼是中介軟體?django中的中介軟體是乙個輕量級 底層的外掛程式系統,可以介入django的請求和響應處理過程,修改django的輸入或輸出。中介軟體的設計為開發者提供了一種無侵入式的開發方式,增強了django框架的健壯性。我們可以使用中介軟體,在django處理檢視的不同階段對輸入或輸出進行...