Почнемо з основ. Серіалізація — це процес перетворення даних у формат, який може бути легко переданий між різними системами. У нашому випадку це найчастіше 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
- Перетворення даних із Python (наприклад, моделей) у JSON (або інший формат, такий як XML).
- Перетворення даних із форматів на кшталт JSON в об'єкти Python.
- Валідація даних, щоб переконатися, що користувач надіслав коректну інформацію.
На цьому етапі ви, ймовірно, запитуєте себе: "Як це працює в коді?". Погнали розбиратись!
Структура серіалізаторів у DRF
DRF надає нам два основних типи серіалізаторів:
- Serializer — базовий клас, який використовується для налаштування та контролю за процесом серіалізації.
- 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. Але з цим приходять проблеми:
- Багато коду: для кожної моделі ти будеш писати купу функцій. DRF спрощує це.
- Валідація: DRF автоматично перевіряє дані, позбавляючи тебе ручного процесу.
- Чистота коду: Твій код стає більш читабельним і підтримуваним.
DRF робить серіалізацію не просто зручною, але обов'язковою для великих проєктів. Простота та уніфікованість роботи з даними стали однією з причин популярності цього підходу.
Завершення теми
На наступній лекції ми з вами зануримося у створення першого простого серіалізатора і спробуємо застосувати його на практиці. І це набагато простіше, ніж може здатися на перший погляд.
Пам'ятайте, що DRF допомагає "магічним чином" працювати з серіалізацією, але вся магія базується на зрозумілих і доступних вам інструментах. До зустрічі на наступній лекції!
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ