HttpResponseBadRequest

Класс HttpResponseBadRequest применяется для возврата HTTP-ответа с кодом состояния 400, который указывает на то, что сервер не может обработать запрос из-за синтаксической ошибки со стороны клиента. Этот класс наследуется от HttpResponse и автоматически устанавливает статус-код 400. В качестве аргументов принимает содержимое ответа (обычно строку с описанием ошибки) и дополнительные заголовки.

Синтаксис

pythonfrom django.http import HttpResponseBadRequest

response = HttpResponseBadRequest(content='Error message', headers=None)

Пример . Использование во view

Давайте создадим представление, которое проверяет наличие параметра 'id' в GET-запросе и возвращает ошибку 400, если параметр отсутствует:

pythonfrom django.http import HttpResponseBadRequest, HttpResponse
from django.views import View

class ArticleDetailView(View):
  def get(self, request):
    article_id = request.GET.get('id')

    if article_id is None:
      return HttpResponseBadRequest('Missing required parameter: id')

    return HttpResponse(f'Article with id: {article_id}')

Результат выполнения при запросе без параметра 'id':

python"Missing required parameter: id"

Пример . С дополнительными заголовками

Рассмотрим пример, где в ответ добавляется пользовательский заголовок с подсказкой о формате данных:

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

class CreateArticleView(View):
  def post(self, request):
    title = request.POST.get('title')
    content = request.POST.get('content')

    if not title or not content:
      headers = {'X-Error-Hint': 'Both title and content are required'}
      return HttpResponseBadRequest(
        'Invalid data: missing required fields',
        headers=headers
      )

    return HttpResponse('Article created successfully')

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

В современных API часто используют JSON формат для ответа с ошибкой. Рассмотрим такой пример:

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

class ApiView(View):
  def post(self, request):
    try:
      data = json.loads(request.body)
      if 'title' not in data:
        error_data = {
          'error': 'Bad Request',
          'message': 'Title field is required',
          'code': 400
        }
        return HttpResponseBadRequest(
          json.dumps(error_data),
          headers={'Content-Type': 'application/json'}
        )
    except json.JSONDecodeError:
      error_data = {
        'error': 'Bad Request',
        'message': 'Invalid JSON format',
        'code': 400
      }
      return HttpResponseBadRequest(
        json.dumps(error_data),
        headers={'Content-Type': 'application/json'}
      )

    return HttpResponse('Data processed successfully')

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

python"{"error": "Bad Request", "message": "Title field is required", "code": 400}"

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

  • класс HttpResponseNotFound,
    который возвращает код состояния 404 Not Found
  • класс HttpResponseForbidden,
    который возвращает код состояния 403 Forbidden
  • класс HttpResponseNotAllowed,
    который возвращает код состояния 405 Method Not Allowed
  • класс HttpResponseServerError,
    который возвращает код состояния 500 Internal Server Error