【发布时间】:2018-06-02 20:05:22
【问题描述】:
我正在使用 Django 1.11 和 Python 2.7,现在尝试将 throttling 包含到我的 web 服务中。刚开始这似乎很容易,因为 Django 会为您完成所有工作。 但现在我想只限制我的一个视图 并区分经过身份验证的用户和登录用户以及设置“突发”率 (例如每分钟 5 个请求)和“持续”率(例如每天 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,我在其中将这一行添加到我的统计类
class Statistics(APIView):
throttle_classes = (SustainedAnon, BurstAnon, SustainedUser, BurstUser)
它几乎完成了它应该做的事情。它只限制统计类并分别限制登录和匿名用户,但它不会正确限制速率。
未登录时,应用程序在 3 个请求而不是 6 个请求后开始节流,在 10 个请求而不是 20 个请求后登录时开始限制。
我猜这是因为他在每个被调用的节流类中设置了缓存请求值(当未登录时,SustainedAnon 和 BurstAnon)..
但是为什么会发生这种情况,我怎么能告诉 django 只“节流一次”?
【问题讨论】:
标签: python django rest django-rest-framework throttling