Python - Django - 中間件 process_request

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,程序就繼續執行後續的中間件了

相關文章
相關標籤/搜索