2016-08-25 初稿
Django Rest framework 有自带的频率控制配置
全局设置REST_FRAMEWORK = { 'DEFAULT_THROTTLE_CLASSES': ( # 开启匿名用户接口请求频率限制 'rest_framework.throttling.AnonRateThrottle', # 开启授权用户接口请求频率限制 'rest_framework.throttling.UserRateThrottle' ), 'DEFAULT_THROTTLE_RATES': { # 频率限制有second, minute, hour, day # 匿名用户请求频率 'anon': '100/day', # 授权用户请求频率 'user': '1000/day' } }
类视图单独配置from rest_framework.response import Response from rest_framework.throttling import UserRateThrottle from rest_framework.views import APIView class ExampleView(APIView): throttle_classes = (UserRateThrottle,) def get(self, request, format=None): content = { 'status': 'request was permitted' } return Response(content)
方法视图配置 @api_view(['GET']) @throttle_classes([UserRateThrottle]) def example_view(request, format=None): content = { 'status': 'request was permitted' } return Response(content) 自定义方法一:
class BurstRateThrottle(UserRateThrottle): scope = 'burst' class SustainedRateThrottle(UserRateThrottle): scope = 'sustained' ...and the following settings.
settings.py
REST_FRAMEWORK = { 'DEFAULT_THROTTLE_CLASSES': ( 'example.throttles.BurstRateThrottle', 'example.throttles.SustainedRateThrottle' ), 'DEFAULT_THROTTLE_RATES': { 'burst': '60/min', 'sustained': '1000/day' } }
然后在视图里设置 throttle_classes 即可。
方法二:
settings.pyREST_FRAMEWORK = { 'DEFAULT_THROTTLE_CLASSES': ( 'rest_framework.throttling.ScopedRateThrottle', ), 'DEFAULT_THROTTLE_RATES': { 'contacts': '1000/day', 'uploads': '20/day' } }
然后在类视图中设置 throttle_scope
class ContactListView(APIView): throttle_scope = 'contacts' ... class ContactDetailView(APIView): throttle_scope = 'contacts' ... class UploadView(APIView): throttle_scope = 'uploads' ...
1. 匿名用户频率如果设置大于授权用户频率,则以授权用户频率为准。
2. 频率限制是针对单个接口的频率,而不是所有接口的频率。