Ответы

В отличие от базовых объектов HttpResponse, объекты TemplateResponse сохраняют детали контекста, который был предоставлен представлением для вычисления ответа. Окончательный результат ответа не вычисляется до тех пор, пока он не понадобится, позже в процессе ответа.

Django documentation

Фреймворк REST поддерживает согласование содержимого HTTP, предоставляя класс Response, который позволяет возвращать содержимое, которое может быть преобразовано в несколько типов содержимого, в зависимости от запроса клиента.

Класс Response является подклассом Django SimpleTemplateResponse. Объекты Response инициализируются данными, которые должны состоять из собственных примитивов Python. Затем фреймворк REST использует стандартное согласование содержимого HTTP для определения того, как он должен отобразить конечное содержимое ответа.

Нет необходимости использовать класс Response, вы также можете возвращать обычные объекты HttpResponse или StreamingHttpResponse из ваших представлений, если это необходимо. Использование класса Response просто обеспечивает более удобный интерфейс для возврата согласованных по содержанию ответов Web API, которые могут быть преобразованы в различные форматы.

Если вы по каким-то причинам не хотите сильно настраивать REST-фреймворк, вы всегда должны использовать APIView класс или @api_view функцию для представлений, которые возвращают Response объекты. Это гарантирует, что представление сможет выполнить согласование содержимого и выбрать подходящий рендерер для ответа, прежде чем он будет возвращен из представления.


Создание ответов

Response()

Подпись: Response(data, status=None, template_name=None, headers=None, content_type=None)

В отличие от обычных объектов HttpResponse, вы не создаете объекты Response с отрисованным содержимым. Вместо этого вы передаете нерендерированные данные, которые могут состоять из любых примитивов Python.

Рендереры, используемые классом Response, не могут нативно обрабатывать сложные типы данных, такие как экземпляры моделей Django, поэтому перед созданием объекта Response необходимо сериализовать данные в примитивные типы данных.

Вы можете использовать классы Serializer фреймворка REST для выполнения этой сериализации данных или использовать свою собственную сериализацию.

Аргументы:

  • data : Сериализованные данные для ответа.

  • status : Код статуса для ответа. По умолчанию 200. См. также status codes.

  • template_name : Имя шаблона, которое будет использоваться, если выбрано HTMLRenderer.

  • headers : Словарь HTTP-заголовков для использования в ответе.

  • content_type : Тип содержимого ответа. Как правило, он устанавливается автоматически рендерером по результатам согласования содержимого, но в некоторых случаях может потребоваться явное указание типа содержимого.


Атрибуты

.данные

Неотредактированные, сериализованные данные ответа.

.status_code

Цифровой код состояния ответа HTTP.

.содержание

Отрисованное содержимое ответа. Метод .render() должен быть вызван, прежде чем можно будет получить доступ к .content.

.имя_шаблона

template_name , если задано. Требуется только если HTMLRenderer или какой-либо другой пользовательский рендерер шаблона является принятым рендерером для ответа.

.accepted_renderer

Экземпляр рендерера, который будет использоваться для рендеринга ответа.

Устанавливается автоматически с помощью APIView или @api_view непосредственно перед возвратом ответа из представления.

.accepted_media_type

Тип носителя, который был выбран на этапе согласования содержимого.

Устанавливается автоматически с помощью APIView или @api_view непосредственно перед возвратом ответа из представления.

.renderer_context

Словарь дополнительной контекстной информации, которая будет передана методу рендеринга .render().

Устанавливается автоматически с помощью APIView или @api_view непосредственно перед возвратом ответа из представления.


Стандартные атрибуты HttpResponse

Класс Response расширяет SimpleTemplateResponse , и все обычные атрибуты и методы также доступны для ответа. Например, вы можете установить заголовки для ответа стандартным способом:

response = Response()
response['Cache-Control'] = 'no-cache'

.render()

Подпись: .render()

Как и любой другой TemplateResponse , этот метод вызывается для преобразования сериализованных данных ответа в конечное содержимое ответа. Когда вызывается .render(), содержимое ответа будет установлено в результат вызова метода .render(data, accepted_media_type, renderer_context) на экземпляре accepted_renderer.

Обычно вам не нужно вызывать .render() самостоятельно, так как это обрабатывается стандартным циклом ответа Django.

Вернуться на верх