Класс HttpResponseNotAllowed
Класс HttpResponseNotAllowed применяется для формирования
HTTP-ответа с кодом состояния 405, который указывает,
что запрошенный метод HTTP не поддерживается для данного
ресурса. Конструктор класса принимает обязательный аргумент
allowed_methods - список разрешенных методов,
который используется для формирования заголовка Allow
в ответе. Также можно передать необязательный аргумент
content для задания тела ответа и аргументы
*args и **kwargs для передачи дополнительных
параметров в родительский класс HttpResponse.
Синтаксис
HttpResponseNotAllowed(allowed_methods, content=b'', *args, **kwargs)
Пример
Давайте создадим представление, которое разрешает только GET-запросы и возвращает ответ с кодом 405 для других методов:
from 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-запросе:
"HTTP/1.1 405 Method Not Allowed"
"Allow: GET"
"Method Not Allowed: POST"
Пример
Давайте создадим представление, которое разрешает только GET и POST запросы:
from 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-запросе:
"HTTP/1.1 405 Method Not Allowed"
"Allow: GET, POST"
Пример
Давайте создадим представление с кастомным сообщением в теле ответа:
from 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-запросе:
"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