首页 > 解决方案 > 如何在 django 中为每个不同的用户设置速率限制规则

问题描述

当他们尝试访问视图时,我试图为每个不同的用户设置速率限制。这是我的代码:

class Profil(models.Model):
    user=models.OneToOneField(User, on_delete=models.CASCADE)
    rate=models.IntegerField(default=0)

模型.py

@login_required
def flights(request):
    rate=str(Profil.objects.get(user=request.user).rate)
    is_ratelimited(request, key='get:user', rate=rate+'/m')
    ....

但是当我进入这个视图时,我得到了这个错误:

Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/usr/local/lib/python3.7/site-packages/django/core/handlers/base.py", line 126, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/usr/local/lib/python3.7/site-packages/django/core/handlers/base.py", line 124, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/usr/local/lib/python3.7/site-packages/django/contrib/auth/decorators.py", line 21, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "/Users/lucasbouvarel/Documents/testBCM/api/flights/views.py", line 32, in flights
    is_ratelimited(request, key='get:user', rate=rate+'/m')
  File "/usr/local/lib/python3.7/site-packages/ratelimit/utils.py", line 109, in is_ratelimited
    parts = (fn.__module__, fn.__name__)
AttributeError: 'NoneType' object has no attribute '__module__'

我究竟做错了什么?你有更好的主意吗?

标签: pythondjangorate-limiting

解决方案


我尝试了不同的方法,但它仍然不起作用......

@method_decorator(login_required, name='dispatch')
class MyView(RatelimitMixin, View):
    ratelimit_key='user'
    ratelimit_rate='10/m'
    ratelimit_block=True
    ratelimit_method='GET'
    def get(self, request, *args, **kwargs):
        rate=str(Profil.objects.get(user=self.request.user).rate)
        rate=str(Profil.objects.get(user=self.request.user).rate)
        print(is_ratelimited(request, key='get:Profil.user', rate=str(rate)+'/m',group=str(request.user)))

我没有任何错误,我得到一个 httpResponse,但如果帐户用户速率限制为 5,例如,他将能够执行 10(如 MyView 类中所写)。您是否有想法为每个不同的用户设置指定的速率限制。太感谢了


推荐阅读