美文网首页
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十大组件之节流

    简介 首先我们可以先编写一个类 allow_request 这个是处理我们这个用户到底访问了多少次,如果到达阀值,...

  • DRF之权限,节流组件

    权限组件 节流组件

  • DRF认证,权限,限流,流程

    drf十大组件 认证 权限(授权) 用户访问次数/频率限制 版本 解析器(parser) 序列化 分页 路由...

  • DRF节流

    代码使用 utils.throttle 局部使用 全局使用 以上是最基本的自定义 rest_framework中内...

  • DRF十大组件

    节流 作用: 节流(Throttling)类似于权限,因为它决定了是否应该对请求进行授权。节流表示一个临时状态,并...

  • DRF十大组件

    十大组件:认证 权限 节流 版本 解析器 序列化 分页 路由 视图 渲染器 ###################...

  • DRF十大组件

    DRF十大组认证实现 ##############################################...

  • DRF十大组件

  • DRF十大组件

    认证 作用,检测用户是否登录 在视图类中配置 authentication_classes = [] 这是一个列表...

  • DRF十大组件

    认证 作用: 检测用户是否登录 使用方法 权限 作用: 某些接口只能是特定的用户才能访问 使用方法 全局设置RES...

网友评论

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

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