Короткий ответ
Используется декоратор @require_http_methods([...]) (или @require_GET/@require_POST); при запросе не входящим в разрешённый список методом Django вернёт 405 Method Not Allowed.
Как это работает подробнее
Декоратор оборачивает view и перед вызовом проверяет request.method; если метод не в разрешённом списке, возвращается HttpResponseNotAllowed со статусом 405 и заголовком Allow, перечисляющим допустимые методы, а сама view-функция не выполняется.
Пример кода
example.py
from django.views.decorators.http import require_http_methods
from django.http import JsonResponse
@require_http_methods(["GET", "POST"])
def items_view(request):
return JsonResponse({"method": request.method})
# DELETE /items/ -> 405 Method Not Allowed, заголовок Allow: GET, POSTЧто использовать на практике
- Практика. Такой декоратор полезен для FBV, когда нужно явно задокументировать и защитить, какие методы поддерживает view, не прописывая ручную проверку
if request.method != 'POST': return HttpResponseNotAllowed(...)в каждой функции.
Подводные камни
- Риск. Забывают, что CBV (
class View) уже сами возвращают 405 для неопределённых методов без необходимости в декораторе — применение@require_http_methodsк CBV избыточно и может конфликтовать; путают 405 (метод не поддерживается) с 403 (запрещён доступ).