(1)中間件是一個用來處理Django的請求和響應的框架級別的鉤子。它是一個輕量、低級別的插件系統,用於在全局範圍內改變Django的輸入和輸出。每一箇中間件組件都負責作一些特定的功能。說的直白一點中間件是幫助咱們在視圖函數執行以前和執行以後均可以作一些額外的操做,它本質上就是一個自定義類,類中定義了幾個方法,Django框架會在請求的特定的時間去執行這些方法。django
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', ]
(2)中間件的執行過程session
在http請求 到達視圖函數以前 和視圖函數return以後,django會根據本身的規則在合適的時機執行中間件中相應的方法。框架
Django1.9版本之後中間件的執行流程函數
一、執行完全部的request方法 到達視圖函數。spa
二、執行中間件的其餘方法插件
三、通過全部response方法 返回客戶端。3d
注:若是在其中1箇中間件裏 request方法裏 return了值,就會執行當前中間件的response方法,返回給用戶 而後 報錯。。不會再執行下一個中間件。code
(1)在project下隨便建立一個py文件csrf
(2)在setings文件中 註冊這個 py文件
django項目的settings模塊中,有一個 MIDDLEWARE_CLASSES 變量,其中每個元素就是一箇中間件
注意 自定義的中間件request 方法不要return 由於返回值中間件再也不往下執行,致使 http請求到達不了視圖層,由於request在視圖以前執行
from django.utils.deprecation import MiddlewareMixin class Middle1(MiddlewareMixin): def process_request(self,request): print("來了") #不用return Django內部自動幫咱們傳遞 def process_response(self, request,response): print('走了') return response #執行完了這個中間件必定要 傳遞給下一個中間件
中間件中能夠定義5個方法,分別是:
因爲中間件工做在 視圖函數執行前、執行後,適合全部的請求/一部分請求作批量處理
一、作IP限制
二、URL訪問過濾
三、緩存