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

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

В 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

 

Алексей Черемных
6112