Курс «Администрирование ViPNet-сетей»

Разрешить только определенные 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 адреса. Если таковых нет, это значит только одно - что этим сайтом никто не …

Установка и настройка easy-thumbnail в Django
Миниатюры в Django при помощи easy-thumbnail
Автор: Алексей Черемных19 июня 2022

Сегодня я расскажу как установить и настроить в Django библиотеку для создания миниатюр easy-thumbnail, которая поможет сжать динамические картинки на веб-странице. …

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

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

XmlSitemapGenerator - софт для генерации sitemap.xml без ограничений по урлам
Бесплатная программа для создания карты сайта
Автор: Алексей Черемных30 ноября 2020

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

Дубли страниц с GET-параметрами
Найдены страницы-дубли с GET-параметрами
Автор: Алексей Черемных6 января 2022

Недавно я столкнулся в панели Яндекс.Вебмастер с критической ошибкой "Найдены страницы-дубли с GET-параметрами" и начал читать инструкции от других специалистов …

Все теги:

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