Djangoratelimit不是利米

2024-10-03 11:13:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我在heroku上使用Django ratelimit时遇到一个问题,即限制器不工作。我没有发现任何错误。有什么建议我做错了什么?在

在视图.py在

from django.core.cache import cache
from ratelimit.mixins import RatelimitMixin

[...]

class LoginView(RatelimitMixin, FormView):
    ratelimit_key = 'user'
    ratelimit_rate = '1/5m'
    ratelimit_method = 'GET'
    ratelimit_block = True

    template_name = "account/login.html"
    template_name_ajax = "account/ajax/login.html"
    form_class = LoginUsernameForm
    form_kwargs = {}
    redirect_field_name = "next"

    @method_decorator(sensitive_post_parameters())
    @method_decorator(csrf_protect)
    @method_decorator(never_cache)
    def dispatch(self, *args, **kwargs):
        return super(LoginView, self).dispatch(*args, **kwargs)

    def get(self, *args, **kwargs):
        if is_authenticated(self.request.user):
            return redirect(self.get_success_url())
        return super(LoginView, self).get(*args, **kwargs)

在设置.py在

^{pr2}$

Tags: namefrompyimportselfcachegetreturn
1条回答
网友
1楼 · 发布于 2024-10-03 11:13:39

只是想一想可能出了什么问题。请注意,我从未使用过这个应用程序,我只是浏览了一下ratelimit's documentation。在

ratelimit_key更改为ip,而不是{}。在

因为它在登录页面上,我相信user键不会有任何效果,因为它依赖于request.user。在

您可能希望使用ip来代替。在

class LoginView(RatelimitMixin, FormView):
    ratelimit_key = 'ip'
    ratelimit_method = 'POST'

它可能需要您将ratelimit_method更改为POST。至少对我来说更有意义。在

阅读更多关于Ratelimit Keys - Common Keys。在

PS:既然您提到您的应用程序部署在Heroku上,那么在获取客户机的IP地址方面可能存在问题,django ratelimt应用程序可能会使用该地址。阅读关于这个问题的更多信息:Get client's real IP address on Heroku。在

相关问题 更多 >