1. 什么是中間件
中間件是django的門戶,在請求回應進入進出django的時候,都需要先經過中間件,用來全域改變django的輸入和輸出,

django中自帶7個中間件,每個中間件都有其特定的功能,并且django支持自定義中間件,
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',
]
2. 為什么要有中間件
django中涉及到全域相關的功能,都可以利用中間件來完成,例如:
1.全域身份的校驗
2.全域用戶權限的校驗
3.全域訪問頻率的校驗等等
3. 如何自定義中間件
django給自定義中間件類提供了5個自定義的方法,分別是:
1.process_request
2.process_response
3.process_view
4.process_templates_response
5.process_exception
前兩個必須掌握,后三個了解即可!
自定義的步驟:
1.在專案檔案或者應用檔案下創建一個任意名稱的檔案夾
2.在該檔案夾內創建一個任意名字的py檔案
3.在該py檔案中定義一個類,該類必須繼承MiddlewareMixin類
(需要匯入MiddlewareMixin類,from django.utils.deprecation import MiddlewareMixin)
4.定義的類里面必須至少有一個自定義方法
5.在setting.py里面注冊該中間件的路徑

3.1 process_request方法詳解
1.請求來的時候會經過每一個中間件的process_request方法,經過的順序是setting.py里中間件注冊的順序從上往下
2.該方法有一個request引數
3.如果中間件里沒有該方法,則直接跳過該中間件,執行下一個,
4.如果該方法中回傳了HttpResponse物件,則請求將不在往下執行,直接走同級的process_response回傳
(flask框架是需要走完所有的類似于proces_response方法)
5.process_request就是用來作全域相關的所有限制功能
3.2 process_response方法詳解
1.回應走的時候會經過每一個中間件的process_response方法,經過的順序是setting.py里中間件從下往下的順序
2.該方法有兩個引數request和response引數
3.該方法必須回傳一個HttpResponse物件,默認是回傳response,即return response;也可以自定義回傳其他
4.如果中間件里沒有該方法,則直接跳過該中間件,執行下一個,
3.3 其他需要了解的方法
process_view
路由匹配成功之后執行視圖函式之前,會自動執行中間件里面的該放法
順序是按照組態檔中注冊的中間件從上往下的順序依次執行
process_template_response
回傳的HttpResponse物件有render屬性的時候才會觸發
順序是按照組態檔中注冊了的中間件從下往上依次經過
process_exception
當視圖函式中出現例外的情況下觸發
順序是按照組態檔中注冊了的中間件從下往上依次經過
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/502364.html
標籤:其他
上一篇:django中的中間件
下一篇:java基礎
