如何在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__'

我做错了什么?你有更好的主意做我想做的事吗?

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

@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类中所写(。你有没有想过为每个不同的用户设置一个特定的费率限制。非常感谢

最新更新