django中的中介軟體是乙個輕量級、底層的外掛程式系統,可以介入django的請求和響應處理過程,修改django的輸入或輸出。
中介軟體的設計為開發者提供了一種無侵入式的開發方式,增強了django框架的健壯性。
我們可以使用中介軟體,在django處理檢視的不同階段對輸入或輸出進行干預。
中介軟體的原理其實就是定義了乙個裝飾器,但是這個裝飾器可以對整個專案中的所有方法進行裝飾;
我們可以通過中介軟體,對請求物件和響應物件進行相應的干預操作。
實現中介軟體的流程:
1.在子應用中編寫乙個middleware.py的檔案
def my_middleware(get_response):2. 在setting檔案中註冊中介軟體print('中介軟體初始化')
def middlewraer(request, *args, **kwargs):
print('在執行執行前對請求進行干預')
# 加入干預**, 主要應用白名單黑名單
if request.meta['user'] == 'kg':
return httpresponse('該使用者無法訪問')
ret = get_response(request, *args,**kwargs)
print('在執行後對響應進行干預')
return ret
return middlewrae
middleware = [注意:django執行在除錯模式下,中介軟體init部分有可能被呼叫兩次。'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',
# 註冊中介軟體
'users.middleware.my_middleware',
]
多個中介軟體執行流程:
1. 中介軟體會將setting檔案中的middleware列表進行逆序,所以初始化的順序時從下向上的;
2. 在呼叫時,即編寫順序上第乙個中介軟體裝飾的是編寫順序上的第二個中介軟體,而編寫順序上的第二個中介軟體裝飾的才是檢視函式;
3. 在呼叫結束返回時,會先將檢視函式的結果返回給編寫順序上的第二個中介軟體,然後再返回給編寫順序上的第乙個中介軟體。
**解讀:
@decorator1@decorator2
def index(view):
pass
Django之中介軟體
django中的中介軟體 middleware 在django中,中介軟體其實就是乙個類,在請求到來和結束後,django會根據自己的規則在合適的時機執行中介軟體中相應的方法。在django專案的settings模組中,有乙個middleware classes變數,其中每乙個元素就是乙個中介軟體 ...
Django 之 中介軟體
使用裝飾器繞過中介軟體csrf token 從全域性角度改變 django 框架的輸入和輸出 不宜過多 不宜太複雜 middleware 模組名為 mymiddlewares,類名為 md1 mymiddlewares.md1 from django.utils.deprecation import...
django之中介軟體
1 什麼是中介軟體 顧名思義中介軟體就是介於request和response處理之間的一道處理過程,相對比較輕量級,並且在全域性上改變django的輸入和輸出。因為改變的是全域性,所以需要謹慎使用,用不好反而會影響效能。如果你想修改請求,例如被傳送到view中的httprequest物件。或者你想修...