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

首頁 > 編程 > Python > 正文

詳解django自定義中間件處理

2020-02-15 23:46:02
字體:
來源:轉載
供稿:網友

中間件是一個鉤子框架,它們可以介入 Django 的請求和響應處理過程。 它是一個輕量級、底層的 插件 系統,用于在 全局修改 Django 的輸入或輸出 。

每個中間件組件負責完成某個特定的功能

這里介紹的中間件方法適用于 Django1.10 以上

相關文件: django middleware

Django基礎中間件

django.utils.deprecation.pyclass 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

以上為Django基礎中間件源碼,要習慣于看源碼,上面的這段代碼并不復雜,下面我們來一一解釋。

def __init__(self, get_response=None): self.get_response = get_response super(MiddlewareMixin, self).__init__()

熟悉 python 類的都不陌生 __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

__call__ 為每個請求/響應執行的代碼

self.process_request(request) 為每個請求到調用視圖之前的操作,通常可以在這里做一些用戶請求頻率的控制。

self.get_response(request) 為調用視圖

self.process_response(request, response) 為調用視圖完成后的操作

自定義中間件

剛才了解了基礎中間件,現在就開始編寫我們自己的中間件。

通常我們回去繼承基礎中間件來實現自己的功能

from django.utils.deprecation import MiddlewareMixinclass PermissionMiddlewareMixin(MiddlewareMixin):  """  django 中間件  """  def process_request(self, request):    pass  def process_response(self, request, response):    return response

如果你要在請求之前做處理,需要定義 process_request() 方法,去實現相關功能

如果你要在視圖調用之后做處理,需要定義 process_response() 方法,去實現相關功能

:warning:注意 定義 process_response() 方法一定要 return response

需要將你編寫的中間件添加到 settings 中的 MIDDLEWARE 里

我這里寫了一個通過中間件限制客戶端請求頻率,有興趣的可以看一下

django中間件客戶端請求頻率限制

通過redis lua腳本對客戶端IP請求頻率限制

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 千阳县| 仙居县| 珠海市| 瓮安县| 岳阳县| 凤翔县| 项城市| 阿克苏市| 乌兰察布市| 老河口市| 黄浦区| 酒泉市| 康保县| 海兴县| 大港区| 珲春市| 剑川县| 喀喇沁旗| 海城市| 平昌县| 阳新县| 武隆县| 宁城县| 乡宁县| 平原县| 社会| 乐陵市| 酉阳| 招远市| 洛浦县| 镇原县| 安岳县| 荥经县| 万源市| 甘孜县| 江都市| 九寨沟县| 阳高县| 新邵县| 前郭尔| 商城县|