在 Django 的一个视图中设置两个节流率

Setting up two throttle rates in one view in django

我正在使用 Django 1.11 和 Python 2.7,现在尝试将 throttling 包含到我的网络服务中。这在开始时似乎很容易,因为 Django 会为您完成所有工作。 但现在我想 只限制我的一个视图 并区分经过身份验证的用户和登录用户 以及 设置一个'burst' 速率(例如每分钟 5 个请求)和 'sustained' 速率(例如每天 100 个请求)。

为了实现这一目标,我构建了 4 个油门-classes:

class SustainedAnon(AnonRateThrottle):
    rate = '100/day'

class BurstAnon(AnonRateThrottle):
    rate = '6/minute'

class SustainedUser(UserRateThrottle):
    rate = '1000/day'


class BurstUser(UserRateThrottle):
    rate = '20/min'

我根本没有更改 settings.py,因为根据文档 (Django Throtte Docs) 不需要它。 我编辑的唯一文件是我的 views.py,我在其中将这一行添加到我的统计信息 class

class Statistics(APIView):
    throttle_classes = (SustainedAnon, BurstAnon, SustainedUser, BurstUser)

它几乎完成了它应该做的事情。它只会限制统计数据 class 并分别限制登录用户和匿名用户, 它不会正确限制速率。 未登录时,应用程序在 3 个请求而不是 6 个请求后开始节流,并且在 10 个请求而不是 20 个请求后登录。
我猜这是因为他在每个被调用的油门 class 中设置了缓存请求值(未登录时,SustainedAnon 和 BurstAnon)..
但为什么会这样,我怎么能告诉 django 只 'throttle once'?

documentation 状态:

An API may have multiple UserRateThrottles in place at the same time. To do so, override UserRateThrottle and set a unique "scope" for each class.

这意味着您必须为您正在使用的每个 UserRateThrottle 配置不同的范围。

请注意,这也适用于 AnonRateThrottle