Django-drf-内置频率类的使用
限制未登录用户的频率 -- AnonRateThrottle根据ip限制
局部使用
from rest_framework.throttling import AnonRateThrottle # 在视图类中导入
from rest_framework.generics import ListAPIView
class listbook(ListAPIView):
queryset = Student.objects.all()
serializer_class = StudentSerializer
throttle_classes = [AnonRateThrottle] # 在视图类中配置
settings.py配置文件配置
REST_FRAMEWORK = {
'DEFAULT_THROTTLE_RATES': {
'anon': '1/m', # 表示每分钟访问一次
# duration = {'s': 1, 'm': 60, 'h': 3600, 'd': 86400}[period[0]]
}}
限制登录用户访问次数UserRateThrottle -- 根据用户id限制
局部使用
from rest_framework.throttling import UserRateThrottle # 在视图类中导入
from rest_framework.generics import ListAPIView
class listbook(ListAPIView):
queryset = Student.objects.all()
serializer_class = StudentSerializer
throttle_classes = [UserRateThrottle] # 在视图类中配置
settings.py配置文件配置
REST_FRAMEWORK = {
'DEFAULT_THROTTLE_RATES': {
'user': '1/m', # 表示每分钟访问一次
# duration = {'s': 1, 'm': 60, 'h': 3600, 'd': 86400}[period[0]]
}}
# 限制访问频次
-比如某个接口,一分钟只能访问5次,超过了就得等
-按IP地址 限制
-按用户id 限制
# 频率类的使用步骤
1 写个类,继承:SimpleRateThrottle
2 重写某个方法:get_cache_key
-可以返回ip或用户id
-返回什么,就以什么做频率限制
3 写一个类属性,随意命名一个名
scope = 'lqz'
4 在配置文件中配置:
'DEFAULT_THROTTLE_RATES': {
'lqz': '3/m' # 一分钟访问3次
},
5 全局用
'DEFAULT_THROTTLE_CLASSES': [],
6 局部用
class BookView(APIView):
throttle_classes = [MyThrottle]
频率类
from rest_framework.throttling import SimpleRateThrottle
class MyThrottle(SimpleRateThrottle):
scope = 'lqz'
def get_cache_key(self, request, view):
# 返回客户端ip地址:
ip=request.META.get('REMOTE_ADDR')
print('客户端的ip是:',ip)
return ip
配置文件
REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': [ #认证类 'app01.auth.LoginAuth' ], 'DEFAULT_PERMISSION_CLASSES': [ 'app01.permission.AdminPermission' #权限类 ], 'DEFAULT_THROTTLE_RATES': { 'lqz': '3/m' #lqz 要和上面的scope 参数的对应。 一分钟访问三次 }, 'DEFAULT_THROTTLE_CLASSES': [ #频率类 ], }