Я большой сторонник использования структуры, чтобы сократить время, необходимое для того, чтобы сделать что -то полезное. Иногда использование структуры означает, что разработчики должны Изучите Чтобы понять, что возможно. Эта истина еще более очевидна, когда есть слои расширений для достижения желаемого результата. Например, Дирижер колледжа ездит на Emberjs приложение с JSON API питается Django Анкет API использует превосходное Django Rest Framework и DRF JSON API расширение. DRF JSON API переводится с сериализованного вывода Vanilla DRF API на ароматизированный выход JSON API. В этом посте Я расскажу о своем исследовании исходного кода DRF JSON API, чтобы узнать, как загрузить дополнительные ресурсы модели в одном запросе API.
Спецификация JSON API описывает, как включать дополнительные ресурсы с использованием Составной документ Анкет Составные документы – это механизм для сериализации дополнительных ресурсов в одном запросе Анкет Преимущество в том, что это сохранение хотя бы одного HTTP -запроса (со всей его связанной задержкой) и, возможно, больше, если клиентское приложение неэффективно с запросами на ресурсы. К сожалению, DRF JSON API не объясняет, как создать составной документ (факт, который я надеюсь исправить с помощью этого Получить запрос ). На данный момент это означает, что пользователи должны искать источник. Далее следует пример, который может спасти вас от исходного кода Spelunking.
Давайте предположим, что вы хотели бы сделать квестовую игру. В вашей игре у вас есть квест, и вы отправляете рыцаря на свой квест. Есть очень небольшое количество информации о вашем рыцаре, поэтому было бы здорово отправить эти данные вместе с квестом.
Мы можем начать с нежелатых версий двух сериалов.
from rest_framework_json_api import serializers from game.models import Knight, Quest class KnightSerializer(serializers.ModelSerializer): class Meta: model = Knight fields = ( 'id', 'name', 'strength', 'dexterity', 'charisma', ) class QuestSerializer(serializers.ModelSerializer): class Meta: model = Quest fields = ( 'id', 'title', 'reward', 'knight', )
Давайте предположим что Quest.Knight
иностранный ключ к Рыцарь
Анкет В этой версии нашей Questserializer
, DRF JSON API будет сериализовать идентификатор ассоциированного рыцаря без данных, которые мы хотим.
Теперь мы можем преобразовать Questserializer
пару способов. Во -первых, код:
class QuestSerializer(serializers.ModelSerializer): included_serializers = { 'knight': KnightSerializer, } class Meta: model = Quest fields = ( 'id', 'title', 'reward', 'knight', ) class JSONAPIMeta: included_resources = ['knight']
Надеемся, что эти два изменения трудно пропустить. Этот новый сериализатор сообщает DRF JSON API о Что Мы хотим, чтобы API включал через Inclady_resources
мета -атрибут. Мы также должны сказать сериализатор Как сериализовать рыцарь
Анкет Как достигается Inclady_serializers
толковый словарь. Эти настройки достаточно, чтобы сделать DRF JSON API включать как данные квеста, так и Knight в один запрос. Аккуратный!
Эта статья впервые появилась на mattlayman.com Анкет
Оригинал: “https://dev.to/mblayman/sideload-json-api-resources-in-django-4k0a”