Как поместить правила ограничения скорости для каждого отдельного пользователя в Django - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь установить ограничение скорости для каждого отдельного пользователя, когда он пытается получить доступ к представлению. Вот мой код:

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

models.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__'

Чтоя делаю не так? У тебя есть идея, что я хочу?

1 Ответ

0 голосов
/ 31 октября 2019

Я пробовал другим способом, но он все еще не работает ...

@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). У вас есть идея поставить определенный лимит скорости для каждого отдельного пользователя. Большое вам спасибо

...