2015-09-16 8 views
0

Я использую Django Ratelimit для ограничения скорости, которую мои представления могут быть вызваны IP.Что означают среднее значение у ограничителя скорости запроса

Но я не знаю, что означает параметр block, documented here.

Когда я установил его в True, я получаю 403, когда предел превышен.

Но я не понимаю, что произойдет, если для него установлено значение False. Док говорит:

block – False Whether to block the request instead of annotating. 

Мой вопрос: что означает «аннотировать» в этом контексте.

+2

Насколько я вижу в примерах документации, существует пример 'was_limited = getattr (запрос, ограниченный ', False)'. Я полагаю, что установить его в False, не будет блокировать запрос (в документации он указал, что 'block = True' вызывает исключение, то, что не происходит, когда для блока задано значение« False », вы получаете только атрибут' limited' внутри объекта запроса. – petkostas

ответ

2

Как вы говорите, декоратор поднимает исключение Ratelimited, когда block=True. Это возвращает пользователю 403 ответ на отказ.

Если block=False, никаких исключений не возникает. Однако на объекте запроса задано логическое значение limited. На ваш взгляд, вы можете проверить эту «аннотацию» с помощью getattr и обрабатывать ее, как вам нравится.

was_limited = getattr(request, 'limited', False): 
if was_limited: 
    return HttpResponse("You have been rate limited") 

Так что, если вы используете block=False, это до вас, чтобы проверить значение request.limited, и справиться с ней должным образом.