process_request 函數是中間件在收到 request 請求以後執行的函數python
該函數的執行順序是按照 settings.py 中中間件的配置順序執行的django
若是該函數返回 None,繼續執行後面的中間件的 process_request 方法函數
若是該函數返回 response,則再也不繼續執行後面的中間件的 process_request 方法url
middleware_test.py:中間件
from django.utils.deprecation import MiddlewareMixin from django.shortcuts import HttpResponse allow_url = ["/admin/", "/news/", "/uploads/"] class Test(MiddlewareMixin): def process_request(self, request): print("這是一箇中間件 --> test") class Test2(MiddlewareMixin): def process_request(self, request): print("這是一箇中間件 --> test2") if request.path_info in allow_url: return else: return HttpResponse("這裏是 HttpResponse")
views.py:blog
from django.shortcuts import HttpResponse def index(request): print("這裏是 index 頁面") return HttpResponse("這裏是主頁面 index")
訪問,http://127.0.0.1:8000/index/io
運行結果:class
只執行到 Test2 這個中間件,沒有再執行 Test1 這個中間件,由於 Test2 返回了 responsetest
若是訪問,http://127.0.0.1:8000/admin/import
中間件 Test1 也執行了,由於訪問的 url 在 allow_url 內,因此 process_request 返回了一個 None,程序就繼續執行後續的中間件了