限流 Throttling
from rest_framework.throttling import AnonRateThrottle
......
class TestView(APIView):
# 取消登录/权限限制
authentication_classes = []
permission_classes = []
# 限流
throttle_classes = [AnonRateThrottle]
def get(self,request,*args,**kwargs):
......
return Response({'msg':'redis保存成功'},status=status.HTTP_200_OK)
## settings
......
# ---------DRF配置--------------------#
REST_FRAMEWORK = {
......
# 限流,给谁限制
"DEFAULT_THROTTLE_CLASSES": [
# 全局配置,先注释掉
# "rest_framework.throttling.AnonRateThrottle"
],
# 限制要求:1分钟内只能访问3次
"DEFAULT_THROTTLE_RATES": {
'anon': '3/m'
}
}
- 如果是全局配置,一样的套路,settings注释取消,视图类注释掉局部配置即可
class TestView(APIView):
permission_classes = []
def get(self,request,*args,**kwargs):
......
return Response({'msg':'redis保存成功'},status=status.HTTP_200_OK)
......
# ---------DRF配置--------------------#
REST_FRAMEWORK = {
......
"DEFAULT_THROTTLE_CLASSES": [
# 限制登录用户
"rest_framework.throttling.UserRateThrottle",
# 匿名用户
"rest_framework.throttling.AnonRateThrottle"
],
# 限制要求
"DEFAULT_THROTTLE_RATES": {
# 登录用户
'user': '6/m',
# 匿名用户
'anon': '3/m'
}
}
- 如果此时访问接口,报错提示没有 is_authenticated 这个方法
原因是,django框架的User模型有实现这个方法,而DRF节流视图调用了这个方法
我们自定义的User模型却没有这个方法,补充即可
......
# 用户
class User(models.Model):
......
# 补充(模仿源码即可)
@property
def is_authenticated(self):
return True