Код на Гитхабе

СМОТРЕТЬ: плейлист с видеоуроками по Django Rest Framework

УЧИТЬСЯ: Бесплатные курсы по разработке структурированного программного обеспечения

Теперь, когда у нас есть базовый проект, давайте шаг за шагом пройдемся по всем частям Django Rest Framework. Во-первых, мы рассмотрим сериализаторы. Сериализаторы берут наборы запросов и экземпляры моделей и преобразовывают их в собственные типы данных Python. Затем мы можем взять эти типы данных и преобразовать их в JSON. Если вы раньше использовали Django Forms или Models, многое из этого будет выглядеть очень похоже.

Базовый сериализатор

Мы всегда могли определить базовый сериализатор и определить все поля вручную. В документации есть пример этого:

from rest_framework import serializers
class CommentSerializer(serializers.Serializer):
    email = serializers.EmailField()
    content = serializers.CharField(max_length=200)
    created = serializers.DateTimeField()

Но в большинстве случаев у вас будет объект модели, который вы хотите сериализовать. В этом случае использование одного из встроенных сериализаторов моделей значительно упростит эту задачу. Давайте посмотрим на пример из них сейчас.

ModelSerializer

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

class AccountSerializer(serializers.ModelSerializer):
    class Meta:
        model = Account
        fields = ['id', 'account_name', 'users', 'created']

В метаклассе мы сначала устанавливаем модель, это должна быть либо встроенная модель, либо что-то определенное в файле models.py. У нас есть два варианта для полей: либо поместить поля модели, которые мы хотим сериализовать, в список, как в примере выше, либо вместо этого мы могли бы сделать что-то подобное, используя __all__:

class AccountSerializer(serializers.ModelSerializer):
    class Meta:
        model = Account
        fields = ‘__all__’

Это приведет к сериализации всех полей в модели, это просто ярлык, позволяющий избежать ввода всех полей в списке.

HyperlinkedModelSerializer

Очень похоже на сериализатор модели, у нас также есть возможность использовать HyperlinkedModelSerializer. Основное различие между ними заключается в том, что ModelSerializer будет иметь поле идентификатора в качестве первичного ключа, а HyperlinkedModelSerializer будет использовать поле URL вместо идентификатора. В зависимости от того, что вам нужно, вы захотите выбрать тот или иной. Но настраивается он так же, вот пример:

class AccountSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Account
        fields = ['url', 'id', 'account_name', 'users', 'created']

Есть много других настроек и опций, чтобы получить все, что вам нужно, но мы остановимся здесь для этого урока. Как только вы поймете эти концепции, остальные расширенные настройки будут просто основываться на этих идеях.