官方的說法:中間件是一個用來處理Django的請求和響應的框架級別的鉤子。它是一個輕量、低級別的插件系統,用於在全局範圍內改變Django的輸入和輸出。每一箇中間件組件都負責作一些特定的功能。html
可是因爲其影響的是全局,因此須要謹慎使用,使用不當會影響性能。前端
django中間件就相似因而django的保安,消息來的時候和響應走的時候 都必須走過中間件django
優勢:後端
中間件能夠作全局的訪問頻率校驗 身份校驗 。。。
只要是涉及到全局的 你均可以考慮使用中間件來作!!!瀏覽器
django默認有七個中間件,也支持用戶自定義中間件
自定義中間件 django暴露給用戶五個能夠自定義的方法session
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', ]
中間件裏寫的方法影響的是全局:app
網站全局校驗:若是用戶沒有登陸,網站裏都不能訪問框架
中間件能夠定義五個方法,分別是:(主要的是process_request和process_response)函數
# 五個方法 # 掌握 process_request:請求來的時候,會依次(從上往下的順序)執行每個中間件裏面的process_request方法(若是沒有定義那麼直接經過) process_response:響應走的時候,會依次(從下往上的順序)執行每個中間件裏面的process_response方法 # 瞭解 process_views process_templates_response process_exceptions
Django如何執行request和response方法性能
request 它的返回值能夠是None也能夠是HttpResponse對象。返回值是None的話,按正常流程繼續走,交給下一個中間件處理,若是是HttpResponse對象,Django將不執行視圖函數,而將相應對象返回給瀏覽器
# 自定義中間件 1.新建一個任意名稱的py文件 2.文件內 寫類繼承中間件的總類 from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import HttpResponse
class MyMidd(MiddlewareMixin):
def process_request(self,request): print("我是第一個中間件裏面的process_request方法")
# return HttpResponse("若是這裏有返回的話,訪問到第一個中間件完成後就返回了") def process_response(self,request,response): # response後端固定返回給前端的結果 print("我是第一個中間件裏的process_response方法") return response class MyMidd1(MiddlewareMixin): def process_request(self,request): print("我是第2箇中間件裏面的process_request方法") def process_response(self,request,response): print("我是第2箇中間件裏的process_response方法") return response
# 中間件註冊 setting.py中MIDDLEWARE裏添加
'app01.mymiddleware.mymidd.MyMidd', # 項目名稱.中間件放置的目錄.文件名稱.中間件名稱
'app01.mymiddleware.mymidd.MyMidd1',
詳細請查看:https://www.cnblogs.com/Dominic-Ji/p/9229509.html