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 допомагає "магічним чином" працювати з серіалізацією, але вся магія базується на зрозумілих і доступних вам інструментах. До зустрічі на наступній лекції!

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ