1. 程式人生 > >細說Django的中介軟體

細說Django的中介軟體

分析Django的生命週期,我們知道所有的http請求都要經過Django的中介軟體.

假如現在有一個需求,所有到達服務端的url請求都在系統中記錄一條日誌,該怎麼做呢?

Django的中介軟體的簡介

Django的中介軟體類似於linux中的管道符

Django的中介軟體實質就是一個類,類之中有Django已經定義好了一些方法.

每個http請求都會執行中介軟體中的一個或多個方法

進入Django中的請求都會執行process_request方法;
Django返回的資訊都會執行process_response方法.;

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'
, ]

匯入from django.middleware.csrf import CsrfViewMiddleware模組,檢視其原始碼

class CsrfViewMiddleware(MiddlewareMixin)

可以看到CsrfViewMiddleware是繼承MiddlewareMixin這個中介軟體的

再檢視MiddlewareMixin的原始碼

    class MiddlewareMixin(object):
        def __init__(self, get_response=None):
            self.get_response = get_response
            super(MiddlewareMixin, self).__init__()
    
        def
__call__(self, request):
response = None if hasattr(self, 'process_request'): response = self.process_request(request) if not response: response = self.get_response(request) if hasattr(self, 'process_response'): response = self.process_response(request, response) return response

可以知道MiddlewareMixin是呼叫了其內部的__call__方法,__call__方法以反射的方式執行process_requestprocess_response方法.

中介軟體的應用

新建一個middleware專案,在專案的根目錄中新建一個名為middleware的包,在這個package中,新建一個middleware.py檔案.

    from django.utils.deprecation import MiddlewareMixin
    
    class middle_ware1(MiddlewareMixin):
    
        def process_request(self,request):
            print("middle_ware1.process_request")
    
        def process_response(self,request,response):
            print("middle_ware1.process_response")
            return response

settings.py配置檔案的第一行註冊這個中介軟體

MIDDLEWARE = [
    'middleware.middleware.middle_ware1'
    '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',
]

現在如果有http請求到達服務端,先執行中介軟體middle_ware1process_request方法,再執行後面的中介軟體,然後到達檢視函式.

定義一個檢視函式index,配置好路由對映表

def index(request):

    print("index page")
    return HttpResponse("index")

啟動程式,在瀏覽器中輸入http://127.0.0.1:8000/index,會在服務端的後臺列印:

middle_ware1.process_request
index page
middle_ware1.process_response

前端的頁面為顯示為:

index

通過這個我們知道,所有的請求都會經過middle_ware1這個中介軟體,先執行process_request方法,再執行檢視函式本身

最後執行process_response方法,Django會把process_response方法的返回值返回給客戶端.

現在再加一個定義一個middle_ware2的中介軟體

    from django.utils.deprecation import MiddlewareMixin
    
    class middle_ware2(MiddlewareMixin):
    
        def process_request(self,request):
            print("middle_ware2.process_request")
    
        def process_response(self,request,response):
            print("middle_ware2.process_response")
            return response

settings.py配置檔案中註冊中介軟體

    MIDDLEWARE = [
        'middleware.middleware.middle_ware1',
        'middleware.middleware.middle_ware2',
        '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',
    ]

重啟程式,再次重新整理網頁,服務端列印資訊

middle_ware1.process_request
middle_ware2.process_request
index page
middle_ware2.process_response
middle_ware1.process_response

中介軟體的依次執行為:

先執行middle_ware1的process_request方法,
再執行middle_ware2的類的process_request方法,
最後才執行Django的檢視函式.
返回時,先執行middle_ware2的類中的process_response函式,
然後再執行middle_ware1的類中的process_response函式.

上面的例子中,process_response方法設定了return值.假如process_response沒有return值,會怎麼樣呢??

middle_ware1中介軟體的process_response方法中的return註釋掉,再次重新整理網頁,在瀏覽器的網頁上顯示報錯資訊,如下:

A server error occurred.  Please contact the administrator.

http請求到達Django後,先經過自定義的中介軟體middle_ware1middle_ware2,再經過Django內部定義的中介軟體到達檢視函式

檢視函式執行完成後,一定會返回一個HttpResponse或者render.

通過檢視render的原始碼可知,render方法本質上也是呼叫了HttpResponse

    def render(request, template_name, context=None, content_type=None, status=None, using=None):
    
        content = loader.render_to_string(template_name, context, request, using=using)
        return HttpResponse(content, content_type, status)

檢視函式的返回值HttpResponse先經過Django內部定義的中介軟體,再經過使用者定義的中介軟體,最後返回給前端網頁.

所以使用者定義的中介軟體的process_response方法必須設定返回值,否則程式會報錯.

同時,process_response方法中的形參response就是檢視函式的返回值.
那麼我們是否可以自己定義這個形參的返回值呢??

使用者發過來的請求資訊是固定的,因為所有的請求資訊和返回資訊都要經過中介軟體,中介軟體有可能會修改返回給使用者的資訊
,所以有可能會出現使用者收到的返回值與檢視函式的返回值不一樣的情況.

例如,返回給使用者的資訊包含響應頭和響應體,但是開發者在檢視函式中沒有設定響應頭,所以Django會在返回的資訊中自動加上響應頭.

前面,process_response方法設定了返回值,process_request中沒有設定返回值,如果為process_response設定一個返回值,結果會怎麼樣呢??

為中介軟體middle_ware1process_request方法設定返回值

return HttpResponse("request message")

重新整理瀏覽器,服務端列印資訊:

middle_ware1.process_request
middle_ware1.process_response

客戶端瀏覽器顯示資訊為:

request message

先執行process_request方法,因為process_request方法有返回值,程式不會再執行後面的中介軟體,而是直接執行process_response方法,然後返回資訊給使用者.

在實際應用中,process_request方法不能直接設定返回值.如果必須在設定返回值,必須在返回值前加入條件判斷語句.

常用在設定網站的黑名單的時候可以為process_request方法設定返回值.

基於中介軟體實現的簡單使用者登入驗證

比如,在一個部落格系統中,所有的後臺管理頁面都必須有使用者登入後才能開啟,可以基於中介軟體來實現使用者登入驗證

定義中介軟體

    from django.utils.deprecation import MiddlewareMixin
    from django.shortcuts import HttpResponse,redirect
    
    class middle_ware1(MiddlewareMixin):
    
        def process_request(self,request):
            if request.path_info == "/login/":
                return None
    
            if not request.session.get("user_info"):
                return redirect("/login/")
    
        def process_response(self,request,response):
            print("middle_ware1.process_response")
            return response

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',
        'middleware.middleware.middle_ware1',
    ]

使用者請求index網頁,程式執行到process_request,會執行if not語句,然後重定向到login頁面,使使用者輸入使用者名稱和密碼登入進入後臺管理頁面.

Django中介軟體常用方法

除了上面已經用過的process_request方法和porcess_response方法,Django的中介軟體還有以下幾種方法.

process_view方法

定義兩個中介軟體如下

    from django.utils.deprecation import MiddlewareMixin
    from django.shortcuts import HttpResponse,redirect
    
    class middle_ware1(MiddlewareMixin):
    
        def process_request(self,request):
            print("middle_ware1.process_request")
    
        def process_view(selfs,request,view_func,view_func_args,view_func_kwargs):
            print("middle_ware1.process_view")
    
        def process_response(self,request,response):
            print("middle_ware1.process_response")
            return response
    
    class middle_ware2(MiddlewareMixin):
    
        def process_request(self,request):
            print("middle_ware2.process_request")
    
        def process_view(self,request,view_func,view_func_args,view_func_kwargs):
            print("middle_ware2.process_view")
    
        def process_response(self,request,response):
            print("middle_ware2.process_response")
            return response

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',
    'middleware.middleware.middle_ware1',
    'middleware.middleware.middle_ware2',
]

檢視函式

    def index(request):
    
        print("index page")
        return HttpResponse("index")

在瀏覽器中輸入http://127.0.0.1:8000/index頁面,在服務端列印資訊

middle_ware1.process_request
middle_ware2.process_request
middle_ware1.process_view
middle_ware2.process_view
index page
middle_ware2.process_response
middle_ware1.process_response

在前端頁面顯示資訊:

index

程式執行流程:

先執行所有中介軟體中的process_request方法-->進行路由匹配-->執行中介軟體中的的process_view方法

-->執行對應的檢視函式-->執行中介軟體中的process_response方法

上面的例子裡,process_view方法裡沒有設定return值.為process_view方法都設定return值,程式又會怎麼執行呢??

process_view方法設定返回值

    from django.utils.deprecation import MiddlewareMixin
    from django.shortcuts import HttpResponse,redirect
    
    class middle_ware1(MiddlewareMixin):
    
        def process_request(self,request):
            print("middle_ware1.process_request")
    
        def process_view(selfs,request,view_func,view_func_args,view_func_kwargs):
            return HttpResponse("middle_ware1.process_view")
    
        def process_response(self,request,response):
            print("middle_ware1.process_response")
            return response
    
    class middle_ware2(MiddlewareMixin):
    
        def process_request(self,request):
            print("middle_ware2.process_request")
    
        def process_view(self,request,view_func,view_func_args,view_func_kwargs):
            return HttpResponse("middle_ware2.process_view")
    
        def process_response(self,request,response):
            print("middle_ware2.process_response")

重新整理瀏覽器,在服務端列印資訊如下:

middle_ware1.process_request
middle_ware2.process_request
middle_ware2.process_response
middle_ware1.process_response

在客戶端的瀏覽器頁面顯示資訊如下:

iddle_ware1.process_view

可以看到檢視函式index並沒有執行,程式執行兩個中介軟體的process_request方法後,其次執行process_view方法.

由於process_view方法設定了return值,所以程式中的檢視函式並沒有執行,而是執行了中介軟體中的process_response方法.

process_exception方法

修改中介軟體

    from django.utils.deprecation import MiddlewareMixin
    from django.shortcuts import HttpResponse,redirect
    
    class middle_ware1(MiddlewareMixin):
    
        def process_request(self,request):
            print("middle_ware1.process_request")
    
        def process_view(selfs,request,view_func,view_func_args,view_func_kwargs):
            print("middle_ware1.process_view")
    
        def process_exception(self,request,exvception):
            print("middleware1.process_exception")
    
        def process_response(self,request,response):
            print("middle_ware1.process_response")
            return response
    
    class middle_ware2(MiddlewareMixin):
    
        def process_request(self,request):
            print("middle_ware2.process_request")
    
        def process_view(self,request,view_func,view_func_args,view_func_kwargs):
            print("middle_ware2.process_view")
    
        def process_exception(self,request,exception):
            print("middleware2.process_exception")
    
        def process_response(self,request,response):
            print("middle_ware2.process_response")
            return response

重新整理瀏覽器,服務端列印資訊

middle_ware1.process_request
middle_ware2.process_request
middle_ware1.process_view
middle_ware2.process_view
hello,index page
middle_ware2.process_response
middle_ware1.process_response

根據服務端的列印資訊可以看到,process_exception方法沒有執行,為什麼呢??

這是因為上面的程式碼沒有bug.當代碼執行錯誤,出現報錯資訊的時候,process_exception才會執行

那現在就模擬讓程式出現錯誤,觀察process_exception方法的執行情況

修改檢視函式

    def index(request):
    
        print("index page")
        int("aaaa")
        return HttpResponse("index")

重新整理瀏覽器,服務端後臺列印資訊

middle_ware1.process_request
middle_ware2.process_request
middle_ware1.process_view
middle_ware2.process_view
index page
middleware2.process_exception
middleware1.process_exception
Internal Server Error: /index
Traceback (most recent call last):
......
ValueError: invalid literal for int() with base 10: 'aaaa'
middle_ware2.process_response
middle_ware1.process_response

由服務端的報錯資訊可知,這次process_exception方法果然執行了.

由此我們知道,程式執行錯誤,中介軟體中的process_exception方法才會執行,而程式正常執行的時候,這個方法則不會執行

剛才的程式碼裡,process_exception方法沒有設定返回值,如果為process_exception方法設定返回值,程式的執行流程會是怎麼的呢???

修改中介軟體,為兩個中介軟體的process_exception方法都設定返回值

    from django.utils.deprecation import MiddlewareMixin
    from django.shortcuts import HttpResponse,redirect
    
    class middle_ware1(MiddlewareMixin):
    
        def process_request(self,request):
            print("middle_ware1.process_request")
    
        def process_view(selfs,request,view_func,view_func_args,view_func_kwargs):
            print("middle_ware1.process_view")
    
        def process_exception(self,request,exvception):
            print("middleware1.process_exception")
            return HttpResponse("bug1")
    
        def process_response(self,request,response):
            print("middle_ware1.process_response")
            return response
    
    class middle_ware2(MiddlewareMixin):
    
        def process_request(self,request):
            print("middle_ware2.process_request")
    
        def process_view(self,request,view_func,view_func_args,view_func_kwargs):
            print("middle_ware2.process_view")
    
        def process_exception(self,request,exception):
            print("middleware2.process_exception")
            return HttpResponse("bug2")
    
        def process_response(self,request,response):
            print("middle_ware2.process_response")
            return response

檢視函式

    def index(request):
    
        print("index page")
        int("aaaa")
        return HttpResponse("index")

重新整理頁面,服務端列印資訊

middle_ware1.process_request
middle_ware2.process_request
middle_ware1.process_view
middle_ware2.process_view
index page
middleware2.process_exception
middle_ware2.process_response
middle_ware1.process_response

而在瀏覽器的頁面則顯資訊

bug2

程式的執行流程為:

客戶端發出的http請求到達中介軟體,執行中介軟體中的process_request方法,然後再執行路由匹配,然後執行process_view方法,

然後執行相應的檢視函式,最後執行process_response方法,返回資訊給客戶端瀏覽器.

如果執行檢視函式時出現執行錯誤,中介軟體中的process_exception方法捕捉到異常就會執行,後續的process_exception方法就不會再執行了.

process_exception方法執行完畢,最後再執行所有的process_response方法.

process_template_response方法

process_template_response方法預設也不會被執行,

修改中介軟體

    from django.utils.deprecation import MiddlewareMixin
    from django.shortcuts import HttpResponse,redirect
    
    class middle_ware1(MiddlewareMixin):
    
        def process_request(self,request):
            print("middle_ware1.process_request")
    
        def process_view(selfs,request,view_func,view_func_args,view_func_kwargs):
            print("middle_ware1.process_view")
    
        def process_exception(self,request,exvception):
            print("middle_ware1.process_exception")
            return HttpResponse("bug1")
    
        def process_response(self,request,response):
            print("middle_ware1.process_response")
            return response
    
        def process_template_response(self,request,response):
            print("middle_ware1.process_template_response")
            return response
    
    class middle_ware2(MiddlewareMixin):
    
        def process_request(self,request):
            print("middle_ware2.process_request")
    
        def process_view(self,request,view_func,view_func_args,view_func_kwargs):
            print("middle_ware2.process_view")
    
        def process_exception(self,request,exception):
            print("middleware2.process_exception")
            return HttpResponse("bug2")
    
        def process_response(self,request,response):
            print("middle_ware2.process_response")
            return response
    
        def process_template_response(self,request,response):
            print("middle_ware2.process_template_response")
            return response

修改檢視函式,使檢視函式正常執行


    def index(request):
    
        print("index page")
        return HttpResponse("index")

重新整理瀏覽器,服務端後臺列印資訊如下:

middle_ware1.process_request
middle_ware2.process_request
middle_ware1.process_view
middle_ware2.process_view
index page
middle_ware2.process_response
middle_ware1.process_response

可以看到,程式執行正常,process_template_response方法沒有執行.

事實上,process_template_response方法的執行取決於檢視函式的返回的資訊,

檢視函式如果使用render方法返回資訊,中介軟體裡的process_template_response方法就會被執行.

修改檢視函式,定義一個類,返回其引數response

    class MyResponse(object):
        def __init__(self,response):
            self.response=response
    
        def render(self):
            return self.response
    
    def index(request):
    
        response=HttpResponse("index page")
        return MyResponse(response)

MyResponse類返回的是自定義的物件,這個物件裡邊呼叫了render方法.

index檢視函式裡,先呼叫了HttpResponse方法返回資訊,再使用MyResponse類中的render方法來返回HttpResponse.

執行程式,服務端後臺列印資訊如下:

middle_ware1.process_request
middle_ware2.process_request
middle_ware1.process_view
middle_ware2.process_view
middle_ware2.process_template_response
middle_ware1.process_template_response
middle_ware2.process_response
middle_ware1.process_response

可以看到,process_template_response方法已經執行.

process_template_response的用處

如果要對返回的HttpResponse資料進行處理,可以把要處理的資訊封裝在一個類裡
只要類裡定義了render方法,process_template_response方法才會執行.
    

總結

  • 中介軟體裡本質上就是一個類,
  • 對全域性的http請求做處理的時候可以使用中介軟體
  • 中介軟體中的方法不一定要全部使用,需要哪個用哪個
  • process_request方法不能有return,一定要使用return的時候,要配合條件判斷語句執行
  • process_response方法一定要有return,否則程式會執行錯誤
  • process_view方法不能有return,否則檢視函式不會執行
  • process_exception方法只有在程式出現執行錯誤的時候才會執行
  • process_exception方法設定return時,程式不會再執行後續中介軟體中的process_exception
  • process_template_response方法只有在檢視函式中使用render方法返回資訊的時候才會執行

相關推薦

Django 中介軟體 在其他語言中,有人叫這個管道

https://code.ziqiangxuetang.com/django/django-middleware.html 我們從瀏覽器發出一個請求 Request,得到一個響應後的內容 HttpResponse ,這個請求傳遞到 Django的過程如下: 也就是說,每一個請求都是先通過中介軟體中

Django 中介軟體 Django 中介軟體

Django 中介軟體    前戲 我們在前面的課程中已經學會了給檢視函式加裝飾器來判斷是使用者是否登入,把沒有登入的使用者請求跳轉到登入頁面。我們通過給幾個特定檢視函式加裝飾器實現了這個需求。

Django+中介軟體+登入驗證

  Django的request請求需要首先經過中介軟體處理,再通過URL查詢到對應的views函式進行處理。在settings的MIDDLEWARE_CLASSES中 新增設定中介軟體進行啟用,大致原理如下圖所示:          在使用Django框架進行開發的過程中,遇到一個

day68 Django--中介軟體

一,中介軟體介紹   1.什麼是中介軟體?     中介軟體是一個用來處理Django的請求和響應的框架級別的鉤子(函式)。它是一個輕量、低級別的外掛系統,用於在全域性範圍內改變Django的輸入和輸出。每個中介軟體元件都負責做一些特定的功能。     但是由於其影響的時全域性,所以需要謹慎使用,使用不

Django中介軟體 Django 中介軟體

Django 中介軟體 - 生如夏花、 - 部落格園     生如夏花、   部落格園 首頁 新隨筆

Django 中介軟體實現使用者認證與IP頻率限制

1.URL訪問過濾 通過裝飾器進行使用者認證非常方便,但是在新增部分需要認證的功能時,就需要再次新增裝飾器,如果通過中介軟體來實現,就不需要再進行新增的操作. import re LOGIN_URL = '/login/' class MyLogin(MiddlewareMixin): def p

小白學Django----------中介軟體

中介軟體 定義:是介於request與response處理之間的一道處理過程,相對比較輕量級,並且在全域性上改變django的輸入與輸出。因為改變的是全域性,所以需要謹慎實用,用不好會影響到效能。 1.中介軟體有什麼用 如果你想修改請求,例如被傳送到view中的HttpReque

Django中介軟體的處理流程

1、中介軟體介紹   wsgi之後 urls.py之前 在全域性 操作Django請求和響應的模組! 2、中介軟體的方法 2.1、process_request   執行順序:       按照註冊的順序(在settings.py裡面設定中 從上到下的順序)  何時執行:

利用django中介軟體django.middleware.csrf.CsrfViewMiddleware防止csrf攻擊

一、在django後臺處理 1、將django的setting中的加入django.contrib.messages.middleware.MessageMiddleware,一般新建的django專案中會自帶的。 MIDDLEWARE_CLASSES = [ 'django.middleware.se

利用django中介軟體CsrfViewMiddleware防止csrf攻擊

一、在django後臺處理 1、將django的setting中的加入django.contrib.messages.middleware.MessageMiddleware,一般新建的django專案中會自帶的。 MIDDLEWARE_CLASSES = [ 'django.middleware.se

Django中介軟體實現攔截器(轉載)

1.前言 JavaWeb Struts2的攔截器我們都能很熟悉,在請求交給Action處理之前,先在攔截器中處理,處理完之後再交給Action。  在Django中如何實現相同的效果? 2.Django中介軟體 這個是我的專案的目錄結構。    首先,先在app目錄

Django 中介軟體 Middleware

文章目錄 一、中介軟體 二、啟用中介軟體 三、中介軟體請求和響應 四、中介軟體處理流程說明(如下述的middleware) 五、中介軟體處理順序(如下述的middleware)

Django中介軟體

在有些場合,需要對Django處理的每個request都執行某段程式碼。這類程式碼可能是在view處理之前修改傳入的request,或者記錄日誌資訊以便於除錯,等等。 這類功能可以用Django的中介

Python Flask,請求鉤子(hook),(類似Django中介軟體)

  請求鉤子是通過裝飾器的形式實現,Flask支援如下四種請求鉤子: before_first_request:在處理第一個請求前執行。 before_request:在每次請求前執行(檢視函式執行前)。 after_request:如果沒有未處理的異常丟擲,在每次請求後執

Django 中介軟體

Middleware也就是所謂的中介軟體 Django的中介軟體的這個中間指的是 伺服器接受到Request ---- View處理,以及View處理完 ---- 傳送Response到客戶端 這兩個中間。 1.中介軟體只是實現了某些特定方法的普通物件

Django中介軟體介紹和使用

MIDDLEWARE_CLASSES = [ 'django.middleware.security.SecurityMiddleware' , 'django.contrib.sessions.middleware.SessionMiddleware' , 'django.mi

Django學習筆記9——Django 中介軟體

中介軟體 中介軟體介紹 什麼是中介軟體 官方的說法:中介軟體是一個用來處理Django的請求和響應的框架級別的鉤子。它是一個輕量、低級別的外掛系統,用於在全域性範圍內改變Django的輸入和輸出。每個中介軟體元件都負責做一些特定的功能。

django中介軟體CsrfViewMiddleware原始碼分析,探究csrf實現

Django Documentation csrf保護基於以下: 1. 一個CSRF cookie 基於一個隨機生成的值,其他網站無法得到。此cookie由CsrfViewMiddleware產生。它與每個呼叫django.middleware.csrf.g

Django中介軟體解析

中介軟體:中介軟體是Django框架給我們預留的函式介面,讓我們可以干預請求和應答的過程。 中介軟體應用場景: 1 IP限制 2 url訪問過濾 3 快取(請求過來後,中介軟體看有沒有快取資料,有的話直接返回給使用者,沒有的話再執行檢視函式) 中介軟體預留函式 1

python Django中介軟體的使用,原理 和實際應用

建立中介軟體 MIDDLEWARE = [ # 自定義 在 對應app內建立一個 my_middleware.py 然後路徑填寫進來即可 ] 常用兩中介軟體process_request & process_response from