# 在项目配置文件中全局配置
REST_FRAMEWORK = {
'DEFAULT_THROTTLE_CLASSES': [
# 针对匿名用户,限制访问频率
'rest_framework.throttling.AnonRateThrottle',
# 针对登录用户
'rest_framework.throttling.UserRateThrottle',
],
'DEFAULT_THROTTLE_RATES': {
# 针对匿名用户
'anon': '5/m',
# 针对登录用户
'user': '10/m',
}
}
# 在视图类中局部配置,
from rest_framework.throttling import AnonRateThrottle,UserRateThrottle
class TestView(APIView):
...
# 针对匿名用户和登录用户
throttle_classes = [AnonRateThrottle,UserRateThrottle]
def get(self,request):
return Response('测试')
# 在配置文件中
REST_FRAMEWORK = {
'DEFAULT_THROTTLE_RATES': {
'anon': '5/m',
'user': '10/m',
}
}
根据ip限制用户访问频率
写一个类继承SimpleRateThrottle,重写get_cache_key方法,返回
from rest_framework.throttling import SimpleRateThrottle
class MyThrottle(SimpleRateThrottle):
scope = 'peng' # 自定义的名字,配置文件中要和这个一样
# 以它的返回值作为频率限制的key
def get_cache_key(self,request,view):
return request.META.get('REMOTE_ADDR')
class BookListView(ListAPIView):
# 局部配置
throttle_classes = [MyThrottle,]
queryset = Book.objects.all()
serializer_class = BookModelSerializer
# 在配置文件中
REST_FRAMEWORK ={
'DEFAULT_THROTTLE_RATES': {
'peng':'3/m',
},
'PAGE_SIZE':2,
}