Общие сведения о парсерах и средствах визуализации

Сериализованные данные должны быть визуализированы в определенном формате перед возвратом в ответе HTTP. Аналогично, при поступлении запроса HTTP необходимо анализировать входящие данные и десериализовать их, прежде чем можно будет работать с ним. REST Framework включает средства визуализации и парсеры для обработки данных.

Посмотрим, как анализировать входящие данные. Получая строку в JSON можно использовать класс JSONParser, предоставляемый REST framework, для преобразования его в объект Python. Выполните следующий код в Python shell:

from io import BytesIO
from rest_framework.parsers import JSONParser
data = b'{"id":4,"title":"Music","slug":"music"}'
JSONParser().parse(BytesIO(data))

Вы получите следующий результат:

{'id': 4, 'title': 'Music', 'slug': 'music'}

REST Framework также включает классы визуализации, позволяющие форматировать ответы API. Framework определяет, какое из средств визуализации использовать при чтении содержимого. Он проверяет заголовок Accept для запроса, чтобы определить ожидаемый тип контента для ответа. При необходимости, визуализация определяется суффиксом формата URL-адреса. Например, доступ будет инициировать JSONRenderer, чтобы вернуть ответ JSON.

Вернитесь к Python shell и выполните следующий код, чтобы визуализировать объект serializer из предыдущего примера сериализации:

from rest_framework.renderers import JSONRenderer
JSONRenderer().render(serializer.data)

Вы получите следующий результат:

b'{"id":4,"title":"Music","slug":"music"}'

Мы используем JSONRenderer для визуализации сериализованных данных в JSON. По умолчанию в REST Framework используются два различных механизма визуализации: JSONRenderer и BrowsableAPIRenderer. Последний предоставляет веб-интерфейс для простого просмотра интерфейса API. Классы визуализации по умолчанию можно изменить с помощью параметра DEFAULT_RENDERER_CLASSES в параметрах REST_FRAMEWORK.

Больше информации здесь: http://www.django-rest-framework.org/api-guide/renderers/ и здесь: http://www.django-rest-framework.org/api-guide/parsers/

results matching ""

    No results matching ""