Определение сериализаторов
После настройки REST Framework необходимо указать, как будут сериализованы наши данные. Выходные данные должны быть сериализованы в определенный формат, а входные данные будут десериализованы для обработки. Framework предоставляет следующие классы для построения сериализаторов для одиночных объектов:
Serializer : Предоставляет сериализацию для обычных экземпляров классов Python
ModelSerializer : Предоставляет сериализацию для экземпляров модели
HyperlinkedModelSerializer : То же, что и ModelSerializer, но представляет отношения объектов со ссылками, а не с первичными ключами
Давайте создадим наш первый сериализатор. Создайте следующую структуру файлов в каталоге приложения courses:
api/
__init__.py
serializers.py
Мы будем работать над функционалом API в каталоге API, для общей организованности. Отредактируте файл serializers.py и добавьте в него следующий код:
from rest_framework import serializers
from ..models import Subject
class SubjectSerializer(serializers.ModelSerializer):
class Meta:
model = Subject
fields = ('id', 'title', 'slug')
Это сериализатор для модели Subject. Сериализаторы определяются аналогичным образом в классах Form и ModelForm. Класс Meta позволяет указать модель для сериализации и поля, включаемые в сериализацию. Все поля модели будут включены, если не задан атрибут fields.
Давайте опробуем наш сериализатор. Откройте командную строку и выполните следующую команду:
python manage.py shell
Затем выполните следующий код:
from courses.models import Subject
from courses.api.serializers import SubjectSerializer
subject = Subject.objects.latest('id')
serializer = SubjectSerializer(subject)
serializer.data
В этом примере мы получим объект Subject, создаем экземпляр SubjectSerializer и доступ к сериализованным данным. Будут выведены следующие данные:
{'slug': 'music', 'id': 4, 'title': 'Music'}
Как можно видеть, данные модели переводятся в нативные типы данных Python.