HttpResponseServerError

Класс HttpResponseServerError применяется для формирования HTTP-ответа с кодом состояния 500, который указывает на внутреннюю ошибку сервера. Этот класс наследуется от HttpResponse и предназначен для ситуаций, когда на сервере произошла непредвиденная ошибка, и сервер не может обработать запрос. В отличие от стандартной ошибки 500, которую генерирует Django автоматически, этот класс позволяет вернуть кастомизированное сообщение об ошибке, например, в формате HTML или JSON. Основной параметр конструктора - это строка с содержимым ответа, которая передается пользователю для информирования о проблеме.

Синтаксис

pythonfrom django.http import HttpResponseServerError

response = HttpResponseServerError(content, content_type='text/html', charset='utf-8')

Пример . С текстовым сообщением

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

pythonfrom django.http import HttpResponseServerError
from django.views import View

class MyView(View):
  def get(self, request):
    try:
      # Код, который может вызвать ошибку
      result = 10 / 0
      return HttpResponseServerError('Something went wrong')
    except ZeroDivisionError as e:
      return HttpResponseServerError(f'Error: {str(e)}')

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

python"Error: division by zero"

Пример . С HTML-страницей

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

pythonfrom django.http import HttpResponseServerError
from django.shortcuts import render
from django.views import View

class CustomErrorView(View):
  def get(self, request):
    try:
      # Имитация ошибки
      data = {'user': 'admin'}
      del data['user']
      return render(request, 'success.html')
    except KeyError as e:
      html_content = '<h1>500 - Server Error</h1><p>Please try again later.</p>'
      return HttpResponseServerError(html_content, content_type='text/html')

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

python"<h1>500 - Server Error</h1><p>Please try again later.</p>"

Пример . С JSON-ответом

Для API сервисов можно возвращать ошибку в формате JSON:

pythonimport json
from django.http import HttpResponseServerError
from django.views import View

class ApiErrorView(View):
  def get(self, request):
    try:
      # Код, который может вызвать ошибку
      value = int('abc')
      return HttpResponseServerError('Invalid value')
    except ValueError as e:
      error_data = {
        'error': 'Server Error',
        'detail': str(e),
        'status': 500
      }
      json_data = json.dumps(error_data)
      return HttpResponseServerError(json_data, content_type='application/json')

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

python"{'error': 'Server Error', 'detail': 'invalid literal for int() with base 10: 'abc'', 'status': 500}"

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

  • класс HttpResponseNotFound,
    который возвращает код состояния 404 Not Found
  • класс HttpResponseForbidden,
    который возвращает код состояния 403 Forbidden
  • класс HttpResponseBadRequest,
    который возвращает код состояния 400 Bad Request
  • обработчик handler500,
    который настраивает глобальную обработку ошибок 500