頻率組件
throttle
"""
系統:
1)AnonRateThrottle:對同一IP遊客的限制
2)UserRateThrottle:對同一IP登陸用戶的限制
必須在settings.py中
'DEFAULT_THROTTLE_RATES': {
'user': '10/min', # 登陸的用戶一分鐘能夠訪問10次
'anon': '3/min', # 遊客一分鐘能夠訪問3次
}
在視圖類中:
class TempAPIView(APIView):
...
throttle_classes = [AnonRateThrottle, UserRateThrottle]
自定義:基於auth的Group與Permission表
1)自定義頻率類,繼承SimpleRateThrottle,重寫get_cache_key,明確scope
SimpleRateThrottle已經幫咱們實現了 allow_request、wait
2)scope與settings.py的DEFAULT_THROTTLE_RATES配合使用
3)get_cache_key中完成
拿到限制信息 ident <= request中獲取
沒有限制信息 返回None => 不限制
有限制信息 返回限制信息字符串 => 有限制
"""
自定義頻率類:一分鐘一個手機號只容許訪問一次接口
from rest_framework.throttling import SimpleRateThrottle
class ThreeMinRateThrottle(SimpleRateThrottle):
scope = 'sms'
def get_cache_key(self, request, view):
# 對手機號頻率限制
ident = request.data.get('mobile')
if not ident: # 爲發現限制條件,返回None表明不進行頻率限制
return None
return self.cache_format % {
'scope': self.scope,
'ident': ident
}
# settings.py
'DEFAULT_THROTTLE_RATES': {
'user': '10/min', # 登陸的用戶一分鐘能夠訪問10次
'anon': '3/min', # 遊客一分鐘能夠訪問3次
'sms': '1/min',
}