Как установить множественные ограничения скорости, за 10 секунд, за 10 минут, за 1 день, используя django-ratelimit или throttling? - PullRequest
1 голос
/ 03 июля 2019

Я хочу установить пределы скорости для моих просмотров, основанные на продолжительности 10 секунд, 10 минут и 1 дня. Допустим, пользователь может отправлять 20 запросов / 10 секунд, 100 запросов / 10 минут и 1000 запросов в день.

Я пытался регулировать, но не мог найти способ задать несколько запросов. Я пробовал пакет django-ratelimit, но я не смог найти ни одной такой опции, так как он устанавливает одну строку для скорости, например, rate = '5 / 10m'. Пожалуйста, дайте мне знать, если есть выход для решения этой проблемы

1 Ответ

0 голосов
/ 03 июля 2019

Это описано в документации по django-ratelimit.Вы можете определить несколько @ratelimit декораторов в одном представлении.

Кроме того, формат тарифа позволяет добавлять число к знаменателю :

Вы также можете указать количество единиц, например: X/Yu, где Y - количество единиц .Если u опущено, предполагается, что это секунды.Итак, следующее эквивалентно, и все они означают «сто запросов в пять минут»:

100/5m
100/300s
100/300

Таким образом, вы можете определить эти ограничения следующим образом:

from ratelimit.decorators import ratelimit

@ratelimit(key='user'<b>, rate='20/10s'</b>)
@ratelimit(key='user'<b>, rate='100/10m'</b>)
@ratelimit(key='user'<b>, rate='1000/d'</b>)
def some_view(request):
    pass

Для классана основе видов (например, ViewSet), вы можете украсить его с помощью @method_decorator, например:

django.utils.decorators import <b>method_decorator</b>
from ratelimit.decorators import ratelimit

<b>@method_decorator(</b>ratelimit(key='user', rate='20/10s'), name='dispatch'<b>)</b>
<b>@method_decorator(</b>ratelimit(key='user', rate='100/10m'), name='dispatch'<b>)</b>
<b>@method_decorator(</b>ratelimit(key='user', rate='1000/d'), name='dispatch'<b>)</b>
class MyViewSet(ViewSet):
    # ...
...