我正在使用Django 1.11和Python 2.7,现在尝试将限制包含到我的web服务中。一开始这看起来很容易,因为Django为你做了所有的工作。 但现在我想只限制我的一个观看次数 并区分经过身份验证的用户和已登录的用户以及设置“爆发”'费率(例如每分钟5次请求)和“持续”#39;费率(例如每天100个请求)。
实现这一点,我建立了4个油门类:
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,其中我将此行添加到Statistics类
class Statistics(APIView):
throttle_classes = (SustainedAnon, BurstAnon, SustainedUser, BurstUser)
它几乎完成了应该做的事情。它只会限制登录的Statistics类和限制因素以及匿名用户,但它不会正确地限制费率。
当没有登录时,应用程序会在3次请求后开始限制,而不是6次,并在10次请求后登录而不是20次。
我猜这种情况正在发生,因为他在被调用的每个油门类中设置了缓存请求值(未登录时,SustainedAnon和BurstAnon)。
但是为什么会发生这种情况,我怎么能告诉django只能扼杀一次'?
答案 0 :(得分:0)
API可能同时具有多个UserRateThrottles。 为此,请覆盖UserRateThrottle并为每个设置唯一的“范围” 类。
这意味着您必须为正在使用的每个UserRateThrottle
配置不同的范围。
请注意,这也适用于AnonRateThrottle
。