Ответ
В Django HTTP-ответы формируются с помощью экземпляров класса HttpResponse и его подклассов. Каждый view-обработчик должен возвращать такой объект.
Основные классы для ответов:
-
HttpResponseБазовый класс для отправки текстового контента. Используется для возврата HTML, текста, XML и т.д.from django.http import HttpResponse def simple_view(request): return HttpResponse("Это простой текстовый ответ.", content_type="text/plain") -
JsonResponseСпециализированный подкласс для API. Автоматически сериализует Python-словари в JSON и устанавливает заголовокContent-Type: application/json.from django.http import JsonResponse def api_view(request): data = {'status': 'ok', 'data': [1, 2, 3]} return JsonResponse(data) -
HttpResponseRedirectИспользуется для перенаправления пользователя на другой URL. Обычно создается с помощью шорткатаredirect().from django.shortcuts import redirect def redirect_view(request): # Возвращает ответ с кодом 302 Found return redirect('/new-location/') -
TemplateResponseОтвет, рендеринг которого отложен. Это позволяет middleware-компонентам изменять контекст шаблона уже после того, как view его вернул, но до отправки клиенту.from django.template.response import TemplateResponse def template_view(request): context = {'user': request.user} return TemplateResponse(request, 'profile.html', context)
Кастомизация ответа
Любой объект ответа можно кастомизировать, изменяя его атрибуты, например, код состояния или заголовки:
response = HttpResponse("Страница не найдена", status=404)
response.headers['X-Custom-Header'] = 'MyValue'