Как ограничить запрос на отправку формы в приложении Django

Я хочу ограничить отправку запроса для посетителей (анонимов) в моем приложении django.

Предположим, 10 или 50 лимитов в день/месяц. Если они пытаются искать больше, чем заданный лимит, я хочу показать сообщение "Вы достигли своего дневного или месячного лимита!"

Как я могу это сделать?

Вот мнения:

def homeview(request):
    if request.method == "POST" and 'text1' in request.POST:
        text1 = request.POST.get('text1')
        text2 = request.POST.get('text2')
        data = my_custom_function(text1, text2)
        context = {'data': data}
    else:
        context = {}
    return render(request, 'home.html', context)

здесь форма в шаблоне:

<form action="" method="POST">
    {% csrf_token %}
    <input class="form-control m-3 w-50 mx-auto" type="text" name="text1" id="text1" placeholder="">
    <input class="form-control m-3 w-50 mx-auto" type="text" name="text2" id="text2" placeholder="">
    <input class="btn btn-primary btn-lg my-3" type="submit" value="Submit">
</form>

Вы можете использовать throttling из Django REST framework. Но из коробки нет тарифа дросселирования на месяц. Возможно, вы можете использовать https://stackoverflow.com/a/50371440/4151233 для создания определенного класса.

В противном случае я рекомендую написать собственную реализацию. Она должна быть адаптирована к требованиям с помощью таких вопросов, как:

  • Аутентифицированы ли мои пользователи при выполнении запросов?
  • Насколько быстрой должна быть работа и какая нагрузка ожидается?
  • Допустим ли стандартный запрос к БД или его необходимо реализовать с помощью кэш-фреймворка?
Вернуться на верх