JavaRush /Курсы /Модуль 3: Django /Введение в сериализацию данных

Введение в сериализацию данных

Модуль 3: Django
17 уровень , 0 лекция
Открыта

Начнем с основ. Сериализация — это процесс преобразования данных в формат, который может быть легко передан между различными системами. В нашем случае это чаще всего JSON. JSON (JavaScript Object Notation) — это простой, читаемый формат передачи данных, который стал золотым стандартом для общения между клиентом и сервером.

Как применяют сериализацию

Представьте, что у вас есть объект Python, например, модель Django, которая хранит информацию о книге:

class Book(models.Model):
    title = models.CharField(max_length=255)
    author = models.CharField(max_length=255)
    published_date = models.DateField()
    isbn = models.CharField(max_length=13)

Когда пользователь запрашивает данные, эти объекты нужно отправить в формате, который поймет клиент — обычно JSON. Однако Python не умеет "из коробки" автоматически превращать сложные объекты, такие как модели, в JSON. И вот здесь на сцену выходит сериализация: она берет сложный объект Python и создает из него JSON.

На практике это выглядит примерно так:

Модель:

book = Book(
    title="Django для начинающих",
    author="Джон Доу",
    published_date="2021-08-01",
    isbn="9781234567890"
)

JSON:

{
    "title": "Django для начинающих",
    "author": "Джон Доу",
    "published_date": "2021-08-01",
    "isbn": "9781234567890"
}

И наоборот! Если пользователь отправляет JSON запрос для добавления новой книги, мы должны преобразовать этот JSON обратно в объект Python.

Django REST Framework и сериализация

Django REST Framework (DRF) — это мощный инструмент для создания RESTful API. Среди множества его возможностей важнейшей является удобная работа с сериализацией. DRF берет на себя большую часть работы, позволяя нам сосредоточиться на логике приложения, а не на мелочах.

Основные задачи сериализации в DRF

  1. Преобразование данных из Python (например, моделей) в JSON (или другой формат, такой как XML).
  2. Преобразование данных из форматов вроде JSON в объекты Python.
  3. Валидация данных, чтобы убедиться, что пользователь отправил корректную информацию.

На этом этапе вы, вероятно, задаетесь вопросом: "Как это работает в коде?". Погнали разбираться!

Структура сериализаторов в DRF

DRF предоставляет нам два основных типа сериализаторов:

  1. Serializer — базовый класс, который используется для настройки и контроля за процессом сериализации.
  2. ModelSerializer — упрощенная версия, которая автоматически применяет настройки для работы с моделями Django.

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

Создадим простой сериализатор для нашего объекта Book. Сериализатор определяет, какие поля нашего объекта пойдут в JSON.

from rest_framework import serializers

class BookSerializer(serializers.Serializer):
    title = serializers.CharField(max_length=255)
    author = serializers.CharField(max_length=255)
    published_date = serializers.DateField()
    isbn = serializers.CharField(max_length=13)

Теперь, чтобы превратить объект Book в JSON, мы можем сделать следующее:

book = {
    "title": "Django для начинающих",
    "author": "Джон Доу",
    "published_date": "2021-08-01",
    "isbn": "9781234567890"
}

serializer = BookSerializer(book)
print(serializer.data)

Результат:

{'title': 'Django для начинающих', 'author': 'Джон Доу', 'published_date': '2021-08-01', 'isbn': '9781234567890'}

Десериализация: обратный процесс

Теперь представьте, что клиент отправил следующую JSON-структуру:

{
    "title": "Django для начинающих",
    "author": "Джон Доу",
    "published_date": "2021-08-01",
    "isbn": "9781234567890"
}

Мы хотим преобразовать это в объект Python. Вот как:

data = {
    "title": "Django для начинающих",
    "author": "Джон Доу",
    "published_date": "2021-08-01",
    "isbn": "9781234567890"
}

serializer = BookSerializer(data=data)
if serializer.is_valid():
    print(serializer.validated_data)
else:
    print(serializer.errors)

Здесь is_valid() проверяет, правильные ли данные переданы, а validated_data содержит преобразованные данные.

Зачем вообще нам нужен DRF, если JSON можно сделать самому?

Да, вы можете написать функцию, которая вручную преобразует данные в JSON. Но с этим приходят проблемы:

  1. Много кода: для каждой модели вы будете писать кучу функций. DRF упрощает это.
  2. Валидация: DRF автоматически проверяет данные, избавляя вас от ручного процесса.
  3. Чистота кода: Ваш код становится более читаемым и поддерживаемым.

DRF делает сериализацию не просто удобной, но обязательной для крупных проектов. Простота и унифицированность работы с данными стали одной из причин популярности этого подхода.

Заключение темы

На следующей лекции мы с вами погрузимся в создание первого простого сериализатора и попробуем применить его на практике. И это намного проще, чем может показаться на первый взгляд.

Помните, что DRF помогает "магическим образом" работать с сериализацией, но вся магия основана на понятных и доступных вам инструментах. До встречи на следующей лекции!

1
Задача
Модуль 3: Django, 17 уровень, 0 лекция
Недоступна
Создание простого сериализатора
Создание простого сериализатора
1
Задача
Модуль 3: Django, 17 уровень, 0 лекция
Недоступна
Создание десериализатора для обработки данных о фильм
Создание десериализатора для обработки данных о фильм
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ