HttpResponse и отправка ответа

Последнее обновление: 15.08.2022

Для отправки ответа клиенту в Django применяется класс HttpResponse из пакета django.http. В общем случае для отправки некоторых данных достаточно эти данные передать в конструктор HttpResponse. Например, пусть в файле views.py имеется простейшая функция-представление, которая отправляет ответ клиенту:

from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello")

И в файле urls.py эта функция соотносится с некоторым маршрутом:

from django.urls import path
from hello import views

urlpatterns = [
    path("", views.index),
]

Подобная функция просто передает в HttpResponse некоторый текст, который пользователь затем увидит в браузере. Однако подобной функциональностью HttpResponse не ограничивается. Так, функция инициализации класса определяет несколько параметров:

HttpResponse.__init__(content=b'', content_type=None, status=200, reason=None, charset=None, headers=None)

Параметры:

  • content: содержимое ответа в виде строки байтов. Если передается другое содержимое, то оно конвертируется в строку байтов

  • content_type: MIME-тип ответа, устанавливает HTTP-заголовок Content-Type. Если этот параметр не установлен, то применяется mime-тип text/html и значение настройки DEFAULT_CHARSET, то есть в итоге будет: "text/html; charset=utf-8".

  • charset: кодировка ответа в виде строки. По умолчанию django пытается установить кодировку из параметра content_type, а в случае неудачи для установки кодировки применяется настройка DEFAULT_CHARSET.

  • status: статусный код ответа. По умолчанию равно 200

  • reason_phrase: сообщение, которое отправляется в вместе статусным кодом

  • headers: заголовки ответа в виде словаря

Для хранения отправляемых данных он определяет ряд атрибутов. Некоторые из них:

  • content: содержимое ответа в виде строки байтов

  • headers: отправляемые заголовки в виде словаря

  • charset: кодировка ответа в виде строки. По умолчанию django пытается установить кодировку из заголовка content_type, а в случае неудачи для установки кодировки применяется настройка DEFAULT_CHARSET.

  • status_code: статусный код ответа

  • reason_phrase: сообщение, которое отправляется в вместе статусным кодом

Рассмотрим некоторые возможности. Например, изменим определение функции в файле views.py:

from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello METANIT.COM", headers={"SecretCode": "21234567"})

В данном случае также устанавливается заголовок "SecretCode". Хотя в реальности в HTTP не существует такого заголовка, но мы можем определять кастомные заголовки, чтобы передать через них клиенту какую-нибудь информацию. Например, после обращения к функции мы можем в браузере через инструменты разработчика проинспектировать отправленные сервером заголовки и найти там в том числе заголовок "SecretCode".

HttpResponse и отправка заголовков в веб-приложении на Django и python

Подобным образом можно установить другие параметры, например, статусный код и сообщение к нему:

from django.http import HttpResponse

def index(request):
    return HttpResponse("Произошла ошибка", status=400, reason="Incorrect data")
HttpResponse и отправка статусного кода в веб-приложении на Django и python

Установка содержимого и кодировки:

from django.http import HttpResponse

def index(request):
    return HttpResponse("<h1>Hello</h1>", content_type="text/plain", charset="utf-8")

Хотя в содержимом ответа применяются теги html (<h1>), но браузере теперь будет рассматривать это содержимое как простой текст, потому что установлен заголовок "text/plain":

HttpResponse и установка типа содержимого и кодировки в веб-приложении на Django и python
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850