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

时间:2017-12-20 09:46:10

标签: python django rest django-rest-framework throttling

我正在使用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只能扼杀一次'?

1 个答案:

答案 0 :(得分:0)

documentation州:

  

API可能同时具有多个UserRateThrottles。   为此,请覆盖UserRateThrottle并为每个设置唯一的“范围”   类。

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

请注意,这也适用于AnonRateThrottle