首页 > 其他分享 >频率组件 LL

频率组件 LL

时间:2024-03-13 11:35:43浏览次数:22  
标签:ident 限制 min LL cache sms 频率 组件 scope


1、throttle

"""
系统:
1)AnonRateThrottle:对同一IP游客的限制
2)UserRateThrottle:对同一IP登录用户的限制
必须在settings.py中
'DEFAULT_THROTTLE_RATES': {
    'user': '10/min',  # 登录的用户一分钟可以访问10次
    'anon': '3/min',  # 游客一分钟可以访问3次
}
在视图类中:
class TempAPIView(APIView):
    ...
    throttle_classes = [AnonRateThrottle, UserRateThrottle]
    
    

自定义:基于auth的Group与Permission表
1)自定义频率类,继承SimpleRateThrottle,重写get_cache_key,明确scope
    SimpleRateThrottle已经帮我们实现了 allow_request、wait
2)scope与settings.py的DEFAULT_THROTTLE_RATES配合使用
3)get_cache_key中完成
    拿到限制信息 ident <= request中获取
    没有限制信息 返回None => 不限制
    有限制信息 返回限制信息字符串 => 有限制
"""

 

2、自定义频率类:一分钟一个手机号只允许访问一次接口

代码:

from rest_framework.throttling import SimpleRateThrottle

class ThreeMinRateThrottle(SimpleRateThrottle):
    scope = 'sms'
    def get_cache_key(self, request, view):
        # 对手机号频率限制
        ident = request.data.get('mobile')
        if not ident:  # 为发现限制条件,返回None代表不进行频率限制
            return None
        return self.cache_format % {
            'scope': self.scope,
            'ident': ident
        }
# settings.py
'DEFAULT_THROTTLE_RATES': {
    'user': '10/min',  # 登录的用户一分钟可以访问10次
    'anon': '3/min',  # 游客一分钟可以访问3次
    'sms': '1/min',
}

 



代码解读:

ThreeMinRateThrottle 是一个自定义的速率限制类,它继承自 Django REST framework 中的 SimpleRateThrottle 类。这个类主要用于实现针对手机号发送短信接口的频率限制策略。

在 get_cache_key 方法中:

首先尝试从请求的数据(request.data)中获取手机号码(mobile)作为客户端唯一标识符(ident)。
如果没有找到手机号码,则返回 None,这意味着不对此请求应用任何速率限制。
如果找到了手机号码,则根据指定的范围(scope,在这里为 'sms')和手机号码生成缓存键。这个缓存键将用于存储该特定手机在过去一段时间内的请求次数。
通过设置 THROTTLE_RATES 字典中的 'sms' 项,可以指定每三分钟内允许该手机号发送短信的最大请求次数。例如,在设置文件中添加以下内容:

REST_FRAMEWORK = { ... 
  'THROTTLE_RATES': { 'sms': '3/min', # 表示每三分钟允许发送一次短信 },
  ... } 然后在需要进行短信发送速率限制的视图中引用此限流器:
from rest_framework.views import APIView
from .throttles import ThreeMinRateThrottle
class SmsSendView(APIView):
  throttle_classes = [ThreeMinRateThrottle]
  def post(self, request):
  # 短信发送逻辑...
  pass

 

 

标签:ident,限制,min,LL,cache,sms,频率,组件,scope
From: https://www.cnblogs.com/97zs/p/18070257

相关文章

  • pillow创建验证码图片
    目录一、登录-随机生成图片验证码1、创建图片2、创建画笔3、画点-point()方法4、画线-line()5、画圆-arc()方法6、写文本-text()方法7、特殊字体文件8、随机生成图片验证码一、登录-随机生成图片验证码环境:python10,pillow==10.2.0pipinstallpillow1、创建图片fromPIL......
  • 认证组件 LL
    1、authentication"""系统:session认证rest_framework.authentication.SessionAuthenticationajax请求通过认证:cookie中要携带sessionid、csrftoken,请求头中要携带x-csrftoken第三方:jwt认证rest_framework_jwt.authentication.JSONWebTokenAuthenticationajax请求通过......
  • 权限组件 LL
    1、permission"""系统:1)AllowAny:允许所有用户,校验方法直接返回True2)IsAuthenticated:只允许登录用户必须request.user和request.user.is_authenticated都通过3)IsAuthenticatedOrReadOnly:游客只读,登录用户无限制get、option、head请求无限制前台请求必须校验......
  • 五个视图扩展类 LL
    作用:提供了几种后端视图(对数据资源进行曾删改查)处理流程的实现,如果需要编写的视图属于这五种,则视图可以通过继承相应的扩展类来复用代码,减少自己编写的代码量。这五个扩展类需要搭配GenericAPIView父类,因为五个扩展类的实现需要调用GenericAPIView提供的序列化器与数据库查询的......
  • 七个子类视图 LL
     1)CreateAPIView提供post方法继承自:GenericAPIView、CreateModelMixin2)ListAPIView提供get方法继承自:GenericAPIView、ListModelMixin3)RetrieveAPIView提供get方法继承自:GenericAPIView、RetrieveModelMixin4)DestoryAPIView提供delete方法继承自:GenericAP......
  • linux Shell 命令行-07-func 函数
    拓展阅读linuxShell命令行-00-intro入门介绍linuxShell命令行-02-var变量linuxShell命令行-03-array数组linuxShell命令行-04-operator操作符linuxShell命令行-05-test验证是否符合条件linuxShell命令行-06-flowcontrol流程控制linuxShell命令行-07-f......
  • 两个视图基类 LL
    1、APIViewrest_framework.views.APIView APIView是RESTframework提供的所有视图的基类,继承自Django的View父类。APIView与View的不同之处在于:传入到视图方法中的是RESTframework的Request对象,而不是Django的HttpRequeset对象;视图方法可以返回RESTframework的Respons......
  • springcloud 基础组件-Feign 调用流程
    原图来自:https://blog.csdn.net/luanlouis/article/details/82821294所有注册的feignclientorg.springframework.cloud.openfeign.FeignAutoConfiguration#feignContext决定使用哪种client的地方org.springframework.cloud.openfeign.FeignAutoConfiguration.OkHttpFeignCo......
  • docker-compose 部署apollo
    apollo-1.9.2docker-compose.yamlversion:'3'services:#模拟一个正常的mysql数据库mysql8:image:mysql:5.7restart:alwayscontainer_name:mysqlports:-3306:3306volumes:-./databases/mysql/logs:/var/log/mysql......
  • 07-ElementPlus组件库
    ElementPlus简介ElementPlus是饿了么团队研发的,基于Vue3的组件库准备工作:创建工程化的Vue项目选择TypeScript参照官方文档安装ElementPlus组件库(当前工程的目录下)npminstallelement-plus--savemain.ts中引入ElementPlus组件库参照官方文档//main.tsimpor......