如何设置自定义速率,以在 django Rest 框架中进行节流?

Ash*_*adi 1 python django throttling django-rest-framework

我使用 DRF 进行限制,根据文档,我可以为我的速率选择以下选项之一:秒、分钟、小时或天。

但问题是,我想要一个自定义速率,例如每 10 分钟 3 个请求。

DRF 中可以吗?

meh*_*sum 5

您应该能够通过扩展SimpleRateThrottle或任何其他扩展类SimpleRateThrottleUserRateThrottle等)来实现这一点。

看看parse_rate方法SimpleRateThrottle

它将请求率字符串作为输入并返回两个元组:(允许的请求数,以秒为单位的时间段)

因此,如果您编写一个类来覆盖此解析逻辑,那么您应该可以顺利进行。

例如:

from pytimeparse.timeparse import timeparse

class ExtendedRateThrottle(throttling.UserRateThrottle):
    def parse_rate(self, rate):
        """
        Given the request rate string, return a two tuple of:
        <allowed number of requests>, <period of time in seconds>
        """
      if rate is None:
          return (None, None)
      num, period = rate.split('/')
      num_requests = int(num)
      duration = timeparse(period)
      return (num_requests, duration)
Run Code Online (Sandbox Code Playgroud)

运行此示例并查看3/10m解析为(3, 600)

现在使用此类作为您的类,DEFAULT_THROTTLE_CLASSES或者您可以使用任何其他限制类。