创建节流类函数,可实现局部节流
from rest_framework.throttling import SimpleRateThrottle
class MyThrottle(SimpleRateThrottle):
rate = '5/m' # 请求次数/时间段 (s,m,h,d)
scope = 'MyThrottle'
def get_cache_key(self, request, view):
print("dddddd")
# print(request.user.__dict__)
#根据用户ID,登录不限制,不登录限制每分钟5次
if request.user and request.user.id:
return None # 返回None,没有次数限制
else:
return 1 # 未登录用户
配置settings,全局节流
REST_FRAMEWORK = {
'DEFAULT_THROTTLE_CLASSES': ['rest_framework.throttling.AnonRateThrottle'],
'DEFAULT_THROTTLE_RATES': {
'vistor': '3/m',
'anon': '2/day',# 匿名用户
},
}
可选限流类
1> AnonRateThrottle
限制所有匿名未认证用户,使用IP区分用户
使用DEFAULT_THROTTLE_RATES[‘anon’]来设置频次
2> UserRateThrottle
限制认证用户,使用user id区分
使用DEFAULT_THROTTLE_RATES[‘user’]来设置频次
3>ScopedRateThrottle
限制用户对于每个视图的访问频次,使用ip或user id