throttle.py:
from rest_framework.throttling import basethrottlehistory 列表的記錄圖示:import time
# 訪問記錄
visit_record = {}
class mythrottle(basethrottle):
"""每 10 秒訪問 3 次
"""def __init__(self):
self.history = none # 用於記錄訪問記錄
def allow_request(self, request, view):
# 獲取使用者的 ip 位址
# 封裝後的 request 中如果有的就不需要到 request._request 中找
remote_addr = request.get_ident(request)
ctime = time.time() # 獲取當前時間
# 如果 ip 還沒記錄,即第一次訪問
if remote_addr not in visit_record:
# 記錄第一次訪問的 ip 位址和訪問時間
visit_record[remote_addr] = [ctime, ]
return true
# 獲取訪問記錄
history = visit_record.get(remote_addr)
self.history = history
# 把當前時間減 10 並和列表中最早的時間進行比較
while history and history[-1] < ctime - 10:
history.pop() # 刪除最早的一條記錄
# 如果還沒有 3 條記錄
if len(history) < 3:
# 將最新的訪問時間插入到列表的第乙個位置
history.insert(0, ctime)
print(history)
return true
return false
# 設定剩餘訪問時間的提示
def wait(self):
ctime = time.time()
return 10 - (ctime - self.history[-1])
越早的訪問記錄放在列表的越後面的位置,方便操作
settings.py 中可以配置全域性訪問頻率類:
"""檢視訂單
"""# 設定訪問頻率類
throttle_classes = [mythrottle, ]
def get(self, request, *args, **kwargs):
response =
try:
response["data"] = order_dict
except exception as e:
pass
return jsonresponse(response)
10 秒內前 3 次可正常訪問,訪問第 4 次:
drf認證 許可權 頻率 過濾 排序 異常處理
使用方法 1 新建乙個認證類檔案,繼承baseauthentication raise authenticationfailed 驗證失敗 else raise authenticationfailed 請求頭沒有token資訊 2 認證類區域性配置 區域性使用,在列表內發那個值認證類 區域性禁用,...
Redis實現訪問頻率控制
現在系統中由於各種需要,經常遇到一種場景 需要限定每個ip位址每分鐘最大訪問次數類似的需求。下面是使用redis實現范文頻率限制的一種方式。場景 要限制每分鐘每個使用者最多只能訪問100個頁面。思路 1.對每個使用者使用乙個名為 rate.limiting 使用者ip 的字串型別鍵 2.每次使用者訪...
日常 nginx訪問頻率限制
去年的事,隨便記記 2017年3月15日 記錄 nginx限制請求頻率 server外面加上 limit req zone binary remote addr zone one 10m rate 1r s 裡面加上 limit req zone one burst 5 解釋 超過頻率的請求會被放到...