Блог Алексея Черемных

Разрешить только определенные HTTP запросы при помощи require_http_methods в Django

Категория: Разработка Теги: Веб-разработка Опубликовано: 3 января 2021 г. 12:22
Код функции-контроллера с декоратором
Код функции-контроллера с декоратором

В Django существует довольно простой способ разрешить только определенные типы HTTP запросов при помощи декоратора представлений require_http_methods.

Для этого необходимо во всех классах и функциях контроллера (views.py) импортировать библиотеку from django.views.decorators.http import require_http_methods и добавить декоратор @require_http_methods(["GET", "POST"]). В скобках передаются названия тех HTTP запросов, которые необходимо разрешить. 

Для сведения: многие веб-сервера автоматически преобразуют HEAD запросы в GET.

POST запрос предполагает отправку данных на сайт, и если таковая не требуется, рекомендуется его отключить. Поэтому в нашем примере POST запросы будут отключены.

Пример кода с использованием функций в views.py:

from django.views.decorators.http import require_http_methods

@require_http_methods(["GET", "HEAD"])
def my_view(request):
    # I can assume now that only GET or POST requests make it this far
    # ...
    pass

Декоратор @require_http_methods(["GET", "HEAD"]) добавляется перед функцией. 

Однако некоторые используют классы-контроллеры, и как в таком случае добавить декоратор? Внутри функции в классе или перед объявлением класса? В любом из этих вариантов работать не будет.

В случае использования классов во views.py require_http_methods используется следующим образом:

from django.views.decorators.http import require_http_methods

class my_class(ListView):
    require_http_methods = ['GET', 'HEAD']
    
    def func(self):
        pass

 

Похожие материалы:


Форма заявки (пример)
Django автоматическое заполнение поля в модели при её создании
Автор: Алексей Черемных10 января 2021

Появилась необходимость заполнить поле с номером заявки до формирования формы, связанной с моделью, но как это сделать? В интернете много способов, …

Код функции
Простой способ в Django блокировать конкретные IP на всем сайте
Автор: Алексей Черемных3 января 2021

На любом сайте приходится блокировать определенные IP адреса. Если таковых нет, это значит только одно - что этим сайтом никто не …

VisualSEOStudio
Бесплатная программа для создания карты сайта
Автор: Алексей Черемных30 ноября 2020

Сегодня не так много бесплатных программ для создания карты сайта. Пара штук, и те работают как не очень. О переводе …

Код
Способ передать варианты выбора choices в forms.ChoiceField из views.py
Автор: Алексей Черемных21 июня 2021

Недавно сам столкнулся с проблемой передачи вариантов выбора для поля формы с типом виджета Radio и типом формы forms.ChoiceField из views.py. Зачем, …

Прогон по каталогам
Есть ли эффект от прогонов по каталогам?
Автор: Алексей Черемных28 ноября 2020

Уже давно разного рода сео специалисты спорят о пользе от прогона по каталогам. Под прогоном имеется в виду рассылка объявлений, …

CleanTalk
Лучшая система для фильтрации спама на сайте
Автор: Алексей Черемных30 ноября 2020

Сегодня Вам прорекламирую безусловно лучшую в рунете систему фильтрации спама для сайтов CleanTalk!

С данным сервисов работаю с 2018 года, …

Все теги:

Подписка на рассылку свежих статей