<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC] 在django中,中間件其實就是一個類,他是一個可以介入django的 `request` 和 `response` 的鉤子框架,在請求響應不同的階段,執行類中不同的代碼,用于在全局修改django的輸入輸出。 ## 自定義中間件 自定義中間件有兩種方式,使用函數定義,和使用類定義。 自定義中間件一般定義在項目目錄或者‘應用目錄下的 `middleware.py` 文件下。 ### 函數定義 ```python def simple_middleware(get_response): # 此處編寫的代碼僅在Django第一次配置和初始化的時候執行一次。 def middleware(request): # 此處編寫的代碼會在每個請求處理視圖前被調用。 response = get_response(request) # 此處編寫的代碼會在每個請求處理視圖之后被調用。 return response return middleware ``` 示例 ```python def simple_middleware(get_response): print("django被初始化") def middleware(request): print("請求") response = get_response(request) print("響應") return response return middleware ``` 訪問視圖執行結果 ``` django被初始化 [20/Oct/2018 09:44:54] "POST /middleware HTTP/1.1" 200 12 請求 視圖函數 響應 ``` ### 類定義 ```python class SimpleMiddleware(object): def __init__(self, get_response): self.get_response = get_response # 此處編寫的代碼僅在Django第一次配置和初始化的時候執行一次。 def __call__(self, request): # 此處編寫的代碼會在每個請求處理視圖前被調用。 response = self.get_response(request) # 此處編寫的代碼會在每個請求處理視圖之后被調用。 return response ``` 示例 ```python class SimpleMiddleware(object): def __init__(self, get_response): self.get_response = get_response print("初始化") def __call__(self, request): print("請求") response = self.get_response(request) print("響應") return response ``` 訪問視圖執行結果 ``` django初始化 [20/Oct/2018 10:13:34] "POST /middleware HTTP/1.1" 200 12 請求 視圖函數 響應 ``` #### 與舊版本中間件的兼容 在Django 1.10版本之前,中間件設置名為MIDDLEWARE_CLASSES,是長這樣的: ```python class Middleware(MiddlewareMixin): def __init__(self, get_response=None): # 此處編寫的代碼僅在Django第一次配置和初始化的時候執行一次。 self.get_response = get_response def process_request(self, request): # 此處編寫的代碼會在每個請求處理視圖前被調用。 def process_response(self, request, response): # 此處編寫的代碼會在每個請求處理視圖之后被調用。 return response ``` 示例 ```python class Middleware(MiddlewareMixin): def __init__(self, get_response=None): print("django初始化") self.get_response = get_response def process_request(self, request): print("請求") def process_response(self, request, response): print("響應") return response ``` 訪問視圖執行結果 ``` django初始化 [20/Oct/2018 10:13:34] "POST /middleware HTTP/1.1" 200 12 請求 視圖函數 響應 ``` - 參數get_response代表被訪問的視圖函數 ## 中間件的執行順序 中間件的執行順序和注冊順序有關系。在視圖函數處理前,會按注冊順序從上往下執行。在屬兔函數處理后,會按注冊順序從上往下執行, 在初始化的時候,也是從下往上執行。 ![](https://box.kancloud.cn/b12280686a5e2400f977232640b7c17c_880x169.png) 示例 定義兩個中間件 ```python def simple_middleware(get_response): print("django被初始化") def middleware(request): print("請求") response = get_response(request) print("響應") return response return middleware class SimpleMiddleware(object): def __init__(self, get_response): self.get_response = get_response print("初始化") def __call__(self, request): print("請求") response = self.get_response(request) print("響應") return response ``` 注冊順序 ```python MIDDLEWARE = [ 'middleware.middleware.simple_middleware', 'middleware.middleware.SimpleMiddleware', ``` 執行結果 ``` 初始化2 django被初始化1 請求1 請求2 視圖函數 響應2 響應1 ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看