DRF的限流功能

限流,可以对接口访问的频次进行限制,以减轻服务器压力。

  • 全局配置

在settings.py上添加

REST_FRAMEWORK = {
    'DEFAULT_THROTTLE_CLASSES': (
        'rest_framework.throttling.AnonRateThrottle',
        'rest_framework.throttling.UserRateThrottle'
    ),
    'DEFAULT_THROTTLE_RATES': { # 字典
        # 可以使用 second, minute, hour 或day来指明周期
        'anon': '100/day',      # anon 匿名用户
        'user': '1000/day'        # user 登录用户
    }
}

注意:AnonRateThrottle针对匿名用户,即未登录的用户,drf会根据ip来判断访问接口的次数。

UserRateThrottle针对登录用户。

 

  • 针对某个视图设置限流

# 视图集
class DepartmentViewSet(ListModelMixin, RetrieveModelMixin, GenericViewSet):
    ...
    throttle_classes = [ScopedRateThrottle]
    throttle_scope = 'department'    # 这个名字可以随便写,但是要和设置文件中的对应
    ...

# 设置文件
REST_FRAMEWORK = {
    ...
    'DEFAULT_THROTTLE_CLASSES': (
        # 'rest_framework.throttling.ScopedRateThrottle',不能在这里指定
    ),
    # 只对特定的视图限流
    'DEFAULT_THROTTLE_RATES': {
        'department': '4/minute',
    }
}

 

posted @ 2018-11-12 10:09  苦瓜爆炒牛肉  阅读(558)  评论(0编辑  收藏  举报