码迷,mamicode.com
首页 > 其他好文 > 详细

频率组件

时间:2020-02-25 20:37:18      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:sse   mis   增删改   toc   匿名   定义   perm   for   serialize   

频率组件

重点

  1. 如何自定义频率类
  2. 频率检验规则
  3. 自定义频率类时最常见的:短信接口一分钟只能发送一条

自定义频率类

  1. 自定义类继承 SimplerRateThrottle

  2. 设置类实现scope,值就是一个字符串,与settings中的DEFAULT_THROTTLE_RATES进行对应DEFAULT_THROTTLE_RATES就是设置scope绑定的类的频率规则:1/min 就代表一分钟只能访问一次

  3. 重写 get_cache_key(self, request, view) 方法,指定限制条件

    不满足限制条件,返回None:代表对这类请求不进行频率限制

    满足限制条件,返回一个字符串(是动态的):代表对这类请求进行频率限制

    短信频率限制类,返回 "throttling_%(mobile)s" % {"mobile": 实际请求来的电话}

系统频率类

  1. UserRateThrottle: 限制所有用户访问频率
  2. AnonRateThrottle:只限制匿名用户访问频率


频率组件项目使用:请求方式频率限制

throttles.py

from rest_framework.throttling import SimpleRateThrottle
# 只限制查接口的频率,不限制增删改的频率
class MethodRateThrottle(SimpleRateThrottle):
    scope = 'method'
    def get_cache_key(self, request, view):
        # 只有对get请求进行频率限制
        if request.method.lower() not in ('get', 'head', 'option'):
            return None

        # 区别不同的访问用户,直接的限制是不冲突的
        if request.user.is_authenticated:
            ident = request.user.pk
        else:
            # get_ident是BaseThrottle提供的方法,会根据请求头,区别匿名用户,
            # 保证不同客户端的请求都是代表一个独立的匿名用户
            ident = self.get_ident(request)
        return self.cache_format % {'scope': self.scope, 'ident': ident}

settings.py

REST_FRAMEWORK = {
    #  ...
    # 频率规则配置
    'DEFAULT_THROTTLE_RATES': {
        # 只能设置 s,m,h,d,且只需要第一个字母匹配就ok,m = min = maaa 就代表分钟
        'user': '3/min',  # 配合drf提供的 UserRateThrottle 使用,限制所有用户访问频率
        'anon': '3/min',  # 配合drf提供的 AnonRateThrottle 使用,只限制匿名用户访问频率
        'method': '3/min',
    },
}

views.py

from .permissions import IsVipUser
from .throttles import MethodRateThrottle
class CarViewSet(ModelViewSet):
    permission_classes = [IsVipUser]
    throttle_classes = [MethodRateThrottle]

    queryset = models.Car.objects.all()
    serializer_class = serializers.CarSerializer


频率组件

标签:sse   mis   增删改   toc   匿名   定义   perm   for   serialize   

原文地址:https://www.cnblogs.com/kai-/p/12363204.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!