Класс HttpResponseNotAllowed

Класс HttpResponseNotAllowed применяется для формирования HTTP-ответа с кодом состояния 405, который указывает, что запрошенный метод HTTP не поддерживается для данного ресурса. Конструктор класса принимает обязательный аргумент allowed_methods - список разрешенных методов, который используется для формирования заголовка Allow в ответе. Также можно передать необязательный аргумент content для задания тела ответа и аргументы *args и **kwargs для передачи дополнительных параметров в родительский класс HttpResponse.

Синтаксис

pythonHttpResponseNotAllowed(allowed_methods, content=b'', *args, **kwargs)

Пример

Давайте создадим представление, которое разрешает только GET-запросы и возвращает ответ с кодом 405 для других методов:

pythonfrom django.http import HttpResponseNotAllowed
from django.http import HttpResponse

def my_view(request):
  if request.method == 'GET':
    return HttpResponse("This is a GET response")
  else:
    return HttpResponseNotAllowed(['GET'])

Результат выполнения кода при POST-запросе:

python"HTTP/1.1 405 Method Not Allowed"
"Allow: GET"
"Method Not Allowed: POST"

Пример

Давайте создадим представление, которое разрешает только GET и POST запросы:

pythonfrom django.http import HttpResponseNotAllowed
from django.http import HttpResponse

def my_view(request):
  if request.method == 'GET':
    return HttpResponse("GET response")
  elif request.method == 'POST':
    return HttpResponse("POST response")
  else:
    return HttpResponseNotAllowed(['GET', 'POST'])

Результат выполнения кода при DELETE-запросе:

python"HTTP/1.1 405 Method Not Allowed"
"Allow: GET, POST"

Пример

Давайте создадим представление с кастомным сообщением в теле ответа:

pythonfrom django.http import HttpResponseNotAllowed
from django.http import HttpResponse

def my_view(request):
  if request.method == 'GET':
    return HttpResponse("Data retrieved successfully")
  else:
    return HttpResponseNotAllowed(
      ['GET'],
      content=b'Only GET method is allowed for this endpoint'
    )

Результат выполнения кода при PUT-запросе:

python"HTTP/1.1 405 Method Not Allowed"
"Allow: GET"
"Only GET method is allowed for this endpoint"

Смотрите также

  • декоратор require_http_methods,
    который ограничивает доступные методы запроса
  • класс HttpResponse,
    который является базовым классом для всех HTTP-ответов
  • класс HttpResponseForbidden,
    который возвращает ответ с кодом 403 Forbidden
  • класс HttpResponseNotFound,
    который возвращает ответ с кодом 404 Not Found