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

Обработчик handler500

Обработчик handler500 определяет пользовательскую функцию представления, которая вызывается при возникновении необработанного исключения в процессе обработки запроса (ошибка сервера). По умолчанию Django возвращает стандартную HTML-страницу с кодом 500, но вы можете переопределить это поведение, указав собственное представление в корневом файле URLconf. Обработчик принимает объект запроса HttpRequest и должен возвращать объект ответа HttpResponse с кодом статуса 500.

Синтаксис

# В корневом файле urls.py handler500 = 'myapp.views.custom_error_500'

Пример

Давайте создадим кастомное представление для ошибки 500:

# В файле views.py from django.http import HttpResponse from django.template import loader def custom_error_500(request): context = { 'error_code': 500, 'message': 'Internal Server Error' } template = loader.get_template('500.html') return HttpResponse( template.render(context, request), status=500 )

Пример

Подключим обработчик в корневом файле URLconf:

# В файле myproject/urls.py from django.contrib import admin from django.urls import path, include handler500 = 'myapp.views.custom_error_500' urlpatterns = [ path('admin/', admin.site.urls), path('', include('myapp.urls')), ]

Пример

Создадим шаблон для отображения ошибки 500:

<!DOCTYPE html> <html> <head> <title>Ошибка сервера</title> </head> <body> <h1>Ошибка {{ error_code }}</h1> <p>{{ message }}</p> <p>Пожалуйста, попробуйте позже</p> </body> </html>

Пример

Добавим логирование ошибки в представлении:

# В файле views.py import logging from django.http import HttpResponse from django.template import loader logger = logging.getLogger(__name__) def custom_error_500(request): logger.error( 'Error 500 occurred', extra={ 'path': request.path, 'method': request.method } ) context = { 'error_code': 500, 'message': 'Internal Server Error' } template = loader.get_template('500.html') return HttpResponse( template.render(context, request), status=500 )

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

"ERROR: Error 500 occurred"

Пример

Используем обработчик для отправки уведомления администратору:

# В файле views.py from django.core.mail import mail_admins from django.http import HttpResponse from django.template import loader def custom_error_500(request): mail_admins( subject='Error 500', message=f'Error on page: {request.path}', fail_silently=True ) template = loader.get_template('500.html') context = {'error_code': 500} return HttpResponse( template.render(context, request), status=500 )

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

"Email sent to admins"

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

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