美文网首页
DRF十大组件之节流

DRF十大组件之节流

作者: 爽爽ing | 来源:发表于2019-05-07 22:15 被阅读0次

    简介

    节流(Throttling)类似于权限,因为它决定了是否应该对请求进行授权。节流表示一个临时状态,并用于控制客户端对API的请求率。
    与认证一样,可以使用多个节流。对于未经身份验证的请求,您的API可能会有一个限制节流阀,而对于经过身份验证的请求,则会有一个更小的节流阀。
    另一个可能需要使用多个节流的场景是,如果您需要对API的不同部分施加不同的约束,因为某些服务特别占用资源。
    如果您想要同时强制实施节流率和持续的节流率,那么多节流也可以使用。例如,您可能希望将用户限制为每分钟60次请求,每天1000次请求。
    节流不一定只涉及到速率限制的请求。例如,存储服务可能还需要对带宽进行节流,而付费数据服务可能希望对访问的某些记录进行节流。
    

    首先我们可以先编写一个类

    class VisitThrottle(object):
        '''实现节流的逻辑'''
        def allow_request(self, request, view):
            return True  # False表示访问频率太高被限制
        def wait(self):
            return None    
    

    allow_request 这个是处理我们这个用户到底访问了多少次,如果到达阀值,我们就不让它访问,如果没有到达,我们就让他继续访问
    wait 这个就是加入到达了这个阀值,我们还需要等待多少秒,才可以继续访问

    先写一个字典,装用户的访问记录 VISIT_RECORD = {}
    第一种方法基于ip做节流,
    获取用户访问的IP地址
    ip_address = request._request.META.get('REMOTE_ADDR')
    这个方法是按住Ctrl然后按BaseThrottle
    from rest_framework.throttling import BaseThrottle,SimpleRateThrottle
    这个里面有个def get_ident(self, request):方法,
    然后我们就看到了remote_addr = request.META.get('REMOTE_ADDR')

    ctime = time.time()
    #         if ip_address not in VISIT_RECORD:
    #             #第一次访问的时候将访问的时间存储在字典中(ip地址为Key,访问的时间为value值)
    #             VISIT_RECORD[ip_address] = [ctime,]
    

    然后在字典里取值

    第二次访问的时候取出访问的历史记录
      history = VISIT_RECORD[ip_address]
    

    然后进行判断

    if username not in VISIT_RECORD:
    #         #     VISIT_RECORD[username] = [ctime, ]
    #         # history = VISIT_RECORD[username]
    #         self.history = history
    #
    #         while history and history[-1] < ctime - 10:
    #             """如果访问的时间记录超过60秒,就把超过60秒的时间记录移除"""
    #             history.pop()
    #
    #         if len(history) < 6:
    #             history.insert(0,ctime)
    #             return True
    #
    #         return False
    

    按住Ctrl然后点APIView
    设置节流 throttle_classes

    throttle_classes = api_settings.DEFAULT_THROTTLE_CLASSES
    

    throttle_classes设置节流类

    #throttle_classes = [VisitThrottle,]
    

    相关文章

      网友评论

          本文标题:DRF十大组件之节流

          本文链接:https://www.haomeiwen.com/subject/eqlyoqtx.html