Рубрики
Без рубрики

SIDELOAD JSON API Ресурсы в Джанго

Я большой сторонник использования структуры, чтобы сократить время, необходимое для того, чтобы сделать что -то полезное. Occas … Tagged с Python, Django.

Я большой сторонник использования структуры, чтобы сократить время, необходимое для того, чтобы сделать что -то полезное. Иногда использование структуры означает, что разработчики должны Изучите Чтобы понять, что возможно. Эта истина еще более очевидна, когда есть слои расширений для достижения желаемого результата. Например, Дирижер колледжа ездит на 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”