1. 程式人生 > 實用技巧 >python中介軟體

python中介軟體

django的中介軟體是全域性範圍內處理django的請求和響應的框架級別的鉤子。

#定義
from django.utils.deprecation import MiddlewareMixin

class MD1(MiddlewareMixin):
      def process_request(self,request):
                 pass
#setting中需要註冊
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', 'app01.middlewares.my_middleware.MD1
', 'app01.middlewares.my_middleware.MD2', ]

五個方法

process_request(self,request):

process_response(self,request,response):

process_view(self,request,view_func,view_args,view_kwargs):

process_exception(self,request,exception):

詳細介紹:

process_request(self,request):

執行時間:

路由匹配之前,process_view方法前

引數:

request 請求的物件 ,和後續的request都是同一個

執行順序:

按照註冊的順序 順序 執行

返回值:

None 正常流程

HttpResponse物件 當前中介軟體之後的中介軟體中的process_request、路由匹配、process_view、檢視都不執行,直接去執行當前中介軟體的process_response方法

process_response(self,request,response):

執行時間:

檢視之後執行

引數:

request 請求的物件 ,和後續的request都是同一個

response 返回給瀏覽器的響應物件

執行順序:

按照註冊的順序 倒序 執行

返回值:

HttpResponse物件 必須返回

process_view(self,request,view_func,view_args,view_kwargs):

執行時間:

路由之後,檢視之前執行

引數:

request 請求的物件 ,和後續的request都是同一個

view_func 檢視函式

view_args 檢視函式所需的位置引數

view_kwargs 檢視函式所需的關鍵字引數

執行順序:

按照註冊的順序 順序 執行

返回值:

None 正常流程

HttpResponse物件 當前中介軟體之後的中介軟體中的process_view、檢視都不執行,直接去執行最後一箇中間件的process_response方法

process_exception(self,request,exception):

執行時間(觸發條件):

檢視中有異常時才執行

引數:

request 請求的物件 ,和後續的request都是同一個

exception 異常的物件

執行順序:

按照註冊的順序 倒序 執行

返回值:

None 當前的中介軟體沒有處理異常,交於下一個中間處理,如果所有的都沒有處理,django處理異常

HttpResponse物件 當前的中介軟體處理了異常,後面要執行的process_exception方法就不執行了,執行最後一箇中間件的process_response方法

process_template_response(self,request,response):

執行時間(觸發條件):

檢視返回TemplateResponse物件

引數:

request 請求的物件 ,和後續的request都是同一個

response TemplateResponse物件

執行順序:

按照註冊的順序 倒序 執行

返回值:

HttpResponse物件 必須返回

處理物件

response.template_name 模板的名字

response.context_data 模板渲染的變數 {}

process_template_response(self,request,response):