πŸ” Django: Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ сСриализация ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚?

БСриализация Π² Django - это процСсс прСобразования слоТных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Python Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сохранСн ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ Ρ‡Π΅Ρ€Π΅Π· ΡΠ΅Ρ‚ΡŒ. Π­Ρ‚ΠΎ позволяСт ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈΡ… ΠΏΠΎ сСти Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ понятСн Π΄Ρ€ΡƒΠ³ΠΈΠΌ прилоТСниям.

Django прСдоставляСт встроСнныС инструмСнты для сСриализации, основанныС Π½Π° модСльном слоС. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· экзСмпляров ΠΌΠΎΠ΄Π΅Π»ΠΈ Π² JSON, XML, YAML ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹.

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования сСриализации Π² Django:

from django.core.serializers import serialize

data = serialize('json', MyModel.objects.all())

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ сСриализуСт всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ MyModel Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ JSON.

Π”Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚

БСриализация Π² Django - это процСсс прСобразования слоТных структур Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΌΠΎΠ΄Π΅Π»ΠΈ Django, Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ сохранСны, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹ ΠΏΠΎ сСти ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ для отобраТСния Π½Π° Π²Π΅Π±-страницС.

Django прСдоставляСт ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнтарий для сСриализации Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ JSON, XML ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅. БСриализация ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Π° для мноТСства Π·Π°Π΄Π°Ρ‡, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ сохранСниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, прСдоставлСниС Π΄Π°Π½Π½Ρ‹Ρ… Ρ‡Π΅Ρ€Π΅Π· API ΠΈ ΠΎΠ±ΠΌΠ΅Π½ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ систСмами.

Π’ Django сСриализация ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ осущСствляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ класса сСриализатора. Класс сСриализатора прСдоставляСт ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для прСобразования ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² сСриализованный Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ. Π’ Django доступны Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ классы сСриализаторов, Π² зависимости ΠΎΡ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ трСбуСтся ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅.

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ сСриализации ΠΌΠΎΠ΄Π΅Π»ΠΈ Django Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ JSON:

from django.core import serializers
from myapp.models import MyModel

def serialize_model_to_json(model_instance):
    serialized_data = serializers.serialize('json', [model_instance])
    return serialized_data

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ serializers ΠΈΠ· Django ΠΈ модСль MyModel ΠΈΠ· нашСго прилоТСния. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ опрСдСляСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ serialize_model_to_json, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ экзСмпляр ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ сСриализованныС Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON.

Для сСриализации ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ serialize ΠΈΠ· модуля serializers ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Π΅ΠΌΡƒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ сСриализации (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС - 'json') ΠΈ список ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС - [model_instance]). ΠœΠ΅Ρ‚ΠΎΠ΄ serialize Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ сСриализованныС Π΄Π°Π½Π½Ρ‹Π΅ Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅.

ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π΅ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· сСриализованного Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠ΄Π΅Π»ΠΈ Django. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

from django.core import serializers
from myapp.models import MyModel

def deserialize_json_to_model(serialized_data):
    deserialized_data = serializers.deserialize('json', serialized_data)
    model_instance = next(deserialized_data).object
    return model_instance

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ опрСдСляСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ deserialize_json_to_model, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ сСриализованныС Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ экзСмпляр ΠΌΠΎΠ΄Π΅Π»ΠΈ Django.

Для дСсСриализации ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ deserialize ΠΈΠ· модуля serializers ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Π΅ΠΌΡƒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ дСсСриализации (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС - 'json') ΠΈ сСриализованныС Π΄Π°Π½Π½Ρ‹Π΅. ΠœΠ΅Ρ‚ΠΎΠ΄ deserialize Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ Π΅Π³ΠΎ ΠΊΠ°ΠΊ экзСмпляр ΠΌΠΎΠ΄Π΅Π»ΠΈ.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, сСриализация ΠΈ дСсСриализация Π² Django ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΌΠΎΡ‰Π½Ρ‹ΠΌΠΈ инструмСнтами для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Они ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π½Π°ΠΌ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄Π΅Π»ΠΈ Django Π² сСриализованный Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ для сохранСния Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΏΠΎ сСти ΠΈ прСдоставлСния Π΄Π°Π½Π½Ρ‹Ρ… Ρ‡Π΅Ρ€Π΅Π· API.

Π’ ΠΈΡ‚ΠΎΠ³Π΅, сСриализация позволяСт Π½Π°ΠΌ эффСктивно Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² Π½Π°ΡˆΠΈΡ… Django-прилоТСниях ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΈΡ… Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΌΠΈ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ.

Π’ΠΈΠ΄Π΅ΠΎ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

#4. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ. Класс Serializer | Π£Ρ€ΠΎΠΊΠΈ ΠΏΠΎ Django REST Framework

JSON. БСриализация Π΄Π°Π½Π½Ρ‹Ρ…. ПишСм свой сСриализатор. Π Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌ Django REST Framework Serializers.

#5. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ save(), create() ΠΈ update() класса Serializer | Π£Ρ€ΠΎΠΊΠΈ ΠΏΠΎ Django REST Framework

ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ:

πŸ” Django: Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ сСриализация ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚?