РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
285 of 818 menu

Обработчик handler400

Обработчик handler400 позволяет переопределить стандартную страницу ошибки 400 Bad Request в Django. Он представляет собой функцию-обработчик, которая принимает объект запроса и исключение, а возвращает объект ответа. Настройка обработчика выполняется в файле urls.py проекта. Обработчик полезен для создания пользовательских страниц ошибок, логирования некорректных запросов и возврата структурированных JSON-ответов для API.

Синтаксис

# В корневом urls.py проекта handler400 = 'myapp.views.custom_bad_request' # Сама функция-обработчик def custom_bad_request(request, exception): # Логика обработки ошибки return HttpResponse("Custom 400 page", status=400)

Пример

Настроим простой кастомный обработчик для ошибки 400:

# myapp/views.py from django.http import HttpResponse def custom_bad_request(request, exception): return HttpResponse( "<h1>Bad Request</h1><p>Please check your request data.</p>", status=400 )
# myproject/urls.py from django.urls import path from myapp.views import custom_bad_request handler400 = 'myapp.views.custom_bad_request' urlpatterns = [ # Ваши URL-паттерны ]

Пример

Создадим обработчик, который возвращает JSON-ответ для API и логирует ошибку:

# myapp/views.py import json import logging from django.http import JsonResponse logger = logging.getLogger(__name__) def custom_bad_request(request, exception): logger.warning(f"Bad request: {exception}") response_data = { "error": "Bad Request", "status": 400, "message": str(exception) } return JsonResponse(response_data, status=400)

Результат при возникновении ошибки 400:

{"error": "Bad Request", "status": 400, "message": "Invalid data format"}

Пример

Используем шаблон для отображения пользовательской страницы ошибки:

# myapp/views.py from django.shortcuts import render def custom_bad_request(request, exception): return render( request, "400.html", {"error_message": str(exception)}, status=400 )
<!DOCTYPE html> <html> <head> <title>Bad Request</title> </head> <body> <h1>Oops! Bad Request</h1> <p>{{ error_message }}</p> <p>Please check your request and try again.</p> </body> </html>

Пример

Создадим обработчик с проверкой на конкретные типы исключений:

# myapp/views.py from django.http import HttpResponse from django.core.exceptions import SuspiciousOperation def custom_bad_request(request, exception): if isinstance(exception, SuspiciousOperation): error_type = "Security violation detected" else: error_type = "General bad request" return HttpResponse( f"<h1>400 Bad Request</h1><p>{error_type}: {exception}</p>", status=400 )

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

  • обработчик handler404,
    который обрабатывает ошибки "Not Found"
  • обработчик handler500,
    который обрабатывает внутренние ошибки сервера
  • обработчик handler403,
    который обрабатывает ошибки доступа "Forbidden"
  • класс HttpResponseBadRequest,
    который возвращает ответ со статусом 400
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить