国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

詳解Django中間件執(zhí)行順序

2020-02-15 22:24:19
字體:
供稿:網(wǎng)友

中間件

Django中的中間件是一個輕量級、底層的插件系統(tǒng),可以介入Django的請求和響應(yīng)處理過程,修改Django的輸入或輸出。中間件的設(shè)計為開發(fā)者提供了一種無侵入式的開發(fā)方式,增強了Django框架的健壯性。

我們可以使用中間件,在Django處理視圖的不同階段對輸入或輸出進行干預(yù)。

1 中間件的定義方法

定義一個中間件工廠函數(shù),然后返回一個可以別調(diào)用的中間件。

中間件工廠函數(shù)需要接收一個可以調(diào)用的get_response對象。

返回的中間件也是一個可以被調(diào)用的對象,并且像視圖一樣需要接收一個request對象參數(shù),返回一個response對象。

def simple_middleware(get_response): # 此處編寫的代碼僅在Django第一次配置和初始化的時候執(zhí)行一次。 def middleware(request):  # 此處編寫的代碼會在每個請求處理視圖前被調(diào)用。  response = get_response(request)  # 此處編寫的代碼會在每個請求處理視圖之后被調(diào)用。  return response return middleware

例如,在users應(yīng)用中新建一個middleware.py文件,

def my_middleware(get_response): print('init 被調(diào)用') def middleware(request):  print('before request 被調(diào)用')  response = get_response(request)  print('after response 被調(diào)用')  return response return middleware

定義好中間件后,需要在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', 'users.middleware.my_middleware', # 添加中間件]

定義一個視圖進行測試

def demo_view(request): print('view 視圖被調(diào)用') return HttpResponse('OK')

執(zhí)行結(jié)果

注意:Django運行在調(diào)試模式下,中間件init部分有可能被調(diào)用兩次。

2 執(zhí)行流程

3 多個中間件的執(zhí)行順序

在請求視圖被處理前,中間件由上至下依次執(zhí)行 在請求視圖被處理后,中間件由下至上依次執(zhí)行

示例:

定義兩個中間件

def my_middleware(get_response): print('init 被調(diào)用') def middleware(request):  print('before request 被調(diào)用')  response = get_response(request)  print('after response 被調(diào)用')  return response return middlewaredef my_middleware2(get_response): print('init2 被調(diào)用') def middleware(request):  print('before request 2 被調(diào)用')  response = get_response(request)  print('after response 2 被調(diào)用')  return response return middleware            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 晋宁县| 淮北市| 革吉县| 汽车| 朝阳市| 会东县| 武鸣县| 贵德县| 丹阳市| 诏安县| 钟祥市| 海丰县| 华宁县| 新郑市| 黎城县| 陵川县| 调兵山市| 定陶县| 长兴县| 大安市| 确山县| 嵊泗县| 嘉定区| 鹿泉市| 社会| 布拖县| 沙坪坝区| 定结县| 马龙县| 平乐县| 六安市| 苏尼特右旗| 桐庐县| 天长市| 永年县| 连云港市| 云和县| 阿尔山市| 海口市| 政和县| 宜宾市|