REST framework:限流

对接口访问的频次进行限制,以减轻服务器压力(反爬虫的一种手段)。

一、前期知识准备

1、限流类型

  • AnonRateThrottle
    • 限制所有匿名未认证用户,使用IP区分用户。
    • 使用DEFAULT_THROTTLE_RATES['anon'] 来设置频次
  • UserRateThrottle
    • 限制认证用户,使用User id 来区分。
    • 使用DEFAULT_THROTTLE_RATES['user']来设置频次
  • ScopedRateThrottle
    • 限制用户对于具体视图的访问频次,通过ip或user id。
    • 视图中使用throttle_scope 指定频次

2、全局配置

  • DEFAULT_THROTTLE_CLASSES:设置限流类型
  • DEFAULT_THROTTLE_RATES:设置限制的频次
复制代码
REST_FRAMEWORK = {
    # 限流规则
    'DEFAULT_THROTTLE_RATES': {
        'anon': '10/minute',  # 未认证的用户,每分钟10次
        'user': '10000/minute'  # 认证的用户,每分钟10000次
    },
    # 限流策略
    'DEFAULT_THROTTLE_CLASSES': [
        'rest_framework.throttling.AnonRateThrottle',
        'rest_framework.throttling.UserRateThrottle'
    ],
}
复制代码
  • 频率周期
    • second:每秒
    • minute:每分钟
    • hour:每小时
    • day:每天

3、局部配置

REST_FRAMEWORK = {
    'DEFAULT_THROTTLE_RATES': {
        'user': '3/minute'
    }
}

二、实操

1、全局配置生效(针对项目的所有接口)

在settings.py文件下面,添加如下:

复制代码
REST_FRAMEWORK = {

    # 限流策略
    'DEFAULT_THROTTLE_CLASSES': [
        'rest_framework.throttling.AnonRateThrottle',
        'rest_framework.throttling.UserRateThrottle',
        'rest_framework.throttling.ScopedRateThrottle',
    ],
    # 限流规则
    'DEFAULT_THROTTLE_RATES': {
        'anon': '10/minute',  # 未认证的用户,每分钟10次
        'user': '10000/minute'  # 认证的用户,每分钟10000次
        'durant': '4/minute',  #此前面的key:durant,自定义
    },
}    
复制代码

2、局部配置生效(针对某个视图类)

复制代码
class UserView(ModelViewSet):
    # 指定模型类查询集
    queryset = UserInfo.objects.all()
    # 指定序列化器类
    serializer_class = UserInfoSerializer


    # 类视图中指定限流类型---认证用户
    throttle_classes = (UserRateThrottle,)

    # 类视图中指定限流类型---匿名用户
    throttle_classes = (UserRateThrottle,)

    # 类视图中指定限流类型---IP,下面的value需和settings配置的值一致
    throttle_scope = 'durant' 
复制代码

 

posted @   未来可期_Durant  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示