zoukankan      html  css  js  c++  java
  • 频率组件

    频率组件

    使用

    ​ 第一步:写一个频率类,继承SimpleRateThrottle,配置一个scop=字符串,重写get_cache_key,返回self.get_ident(request),

    ​ 第二步:在settings中配置

    ​ REST_FRAMEWORK = {

    ​ 'DEFAULT_THROTTLE_RATES': 'l字符串':'限制时间'

    }

    class Throttle(SimpleRateThrottle):
        scope = 'lxx'
        def get_cache_key(self, request, view):
            # return request.META.get('REMOTE_ADDR')
            #返回什么值,就以什么做过滤,返回用户id,就以用户id做过滤
            return self.get_ident(request)  # 这里返回的是ip
    

    局部使用

    在视图类中配置

    class Book(APIView):
        throttle_classes = [MyThrottling,]
        def get(self,request):
            return Response('ok')
    	
        # 报错中文信息,固定写法
            def throttled(self, request, wait):
            from rest_framework.exceptions import Throttled
            class MyThrottled(Throttled):
                default_detail = '访问次数过多'
                extra_detail_singular = '还有 {wait} second.'
                extra_detail_plural = '还剩 {wait} seconds.'
    
            raise MyThrottled(wait)
    

    全局使用

    在settings中配置

    REST_FRAMEWORK={'DEFAULT_THROTTLE_CLASSES':['自己定义的频率类'],}
    

    局部禁用

    throttle_classes=[]
    

    源码分析

    核心代码

    SimpleRateThrottle中的allow_request方法

    获取scope字符串对应的限制频率

    再进行切分拿到各自对应的值

  • 相关阅读:
    记素质拓展
    操场边的人
    ASP.NET MVC FileResult介绍
    SQL SERVER 数据类型详解
    ASP.NET 使用Response.WriteFile方法下载文件
    Java 静态代理和动态代理
    单例模式
    设计模式六原则
    Python 单例模式
    JAVA WEB 中涉及的编解码
  • 原文地址:https://www.cnblogs.com/yanminggang/p/11136165.html
Copyright © 2011-2022 走看看