91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Django中如何使用middleware中間件

發布時間:2021-07-20 16:05:40 來源:億速云 閱讀:117 作者:Leah 欄目:開發技術

本篇文章給大家分享的是有關Django中如何使用middleware中間件,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

settings.py

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',
]

MIDDLEWARE這里列表中的每一個元素,其實就是一個個單獨的中間件,舉例來說:django.middleware.csrf.CsrfViewMiddleware這個中間件,作用就是在我們的 form 表單提交請求的時候,提交的時候必須要帶上csrf_token,否則就不會正確提交。

中間件使用也需要講究順序,下一層依賴上一層的封裝,例如,我們的AuthenticationMiddleware是一個認證中間件,在session 中保存認證用戶的信息,但是他必須依賴于SessionMiddleware才可以被正確使用,所以他也必須在SessionMiddleware之后。但是具體的順序問題可以參考這里

中間件結構

中間件類中需要包含以下處理方法:

1. process_request(self, request)
2. process_view(self, request, callback, callback_args, callback_kwargs)
3. process_template_response(self, request, response)
4. process_exception(self, request, exception)
5. process_response(self, request, response)

執行過程

以我們的項目中默認中間件為例子,具體的流程如下所示:

Django中如何使用middleware中間件

中間件執行前提

中間件要按照一定的順序一層一層的執行下去,需要按照標準返回特定的內容:

  • 如果為 None,則按照順序繼續向下執行

  • 如果為 HttpResonse 對象,則直接將這個對象返回給用戶

此處有一個版本前后的區別,請大家注意區分:

在 Django1.10之后, 當某個中間件,例如CsrfViewMiddleware請求process_request沒有返回 None 后,這個請求會交給CsrfViewMiddleware的process_response來返回,即返回給相同一層的中間件來返回:

Django中如何使用middleware中間件

在 Django1.10之前的版本,會返回到最底層的中間件來返回:

Django中如何使用middleware中間件

中間件方法:

1、process_request(self, request)

其中request參數就是我們的HttpRequest對象,process_request 會在每個request在被決定使用哪個view之前調用,它會返回None或HttpResponse對象

2、process_view(self, request, callback, callback_args, callback_kwargs)

其中request參數就是的HttpRequest對象,callback 就是請求被決定使用的 view 函數,書具體的函數名,不是字符串類型。callback_args和callback_kwargs是 view 函數需要接受的參數,它會返回None或HttpResponse對象

3、process_template_response(self, request, response)

其中request 是 HttpRequest 對象, response 是一個由Django view或者中間件返回的TemplateResponse 對象,process_template_response()在 view 使用 render 渲染一個模版對象完成之后被調用,它必須返回一個render 方法執行后的response對象。

4、process_exception(self, request, exception)

其中request參數就是的HttpRequest對象,exception是view函數中raise的Exception對象,當 view 函數 raise 一個 exception 的時候調用process_exception,它會返回None或HttpResponse對象

5、process_response(self, request, response)

其中request是 HttpRequest 對象,response 是一個django view或者中間件返回的 HttpResponse 或者StreamingHttpResponse對象,process_response會在所有響應到達瀏覽器之前被調用

中間件的詳細執行流程

由于process_template_response在特定的 rander 渲染中才會被調用,所以過程中不添加該方法

Django中如何使用middleware中間件

自建中間件與執行過程測試

為了更加清晰的展示中間件的執行過程與如何自定義一個中間件,我們模擬一個簡單的用戶請求和中間件執行過程:

自定義中間件

from django.utils.deprecation import MiddlewareMixin
class MyMiddleware_1(MiddlewareMixin):
 def process_request(self, request):
  print("自定義 process_request 1")
  return None

 def process_response(self, request, response):
  print("自定義 process_response 1")
  return response

 def process_view(self, request, callback, callback_args, callback_kwargs):
  print("自定義 process_view 1")
  return None

 def process_exception(self, request, exception):
  print("自定義 process_exception 1")


class MyMiddleware_2(MiddlewareMixin):

 def process_request(self, request):
  print("自定義 process_request 2")
  return None

 def process_response(self, request, response):
  print("自定義 process_response 2")
  return response

 def process_view(self, request, callback, callback_args, callback_kwargs):
  print("自定義 process_view 2")
  return None

 def process_exception(self, request, exception):
  print("自定義 process_exception 2")

引入

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.middle_by_me.MyMiddleware_1', # 第一個自定義 middleware
 'app01.middle_by_me.MyMiddleware_2' # 第二個自定義 middleware
]

輸出結果

Django中如何使用middleware中間件

以上就是Django中如何使用middleware中間件,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

佳木斯市| 阳东县| 思南县| 通州市| 桂平市| 融水| 宁夏| 赣榆县| 桐柏县| 谢通门县| 得荣县| 镇坪县| 荣昌县| 莒南县| 嘉祥县| 普洱| 卢氏县| 太白县| 泰宁县| 金昌市| 鄂伦春自治旗| 邵东县| 澎湖县| 兰溪市| 米易县| 阜新| 维西| 承德市| 阜平县| 河南省| 永兴县| 都匀市| 黎平县| 淮阳县| 濮阳县| 克东县| 泰顺县| 大名县| 道真| 汝城县| 兴宁市|