فرض کنید بکند ما یک فارسی زبان (پایتون) و فرانت اند ما یک توریسته که فقط انگلیسی (Json) متوجه میشه. این دو نفر هر چقدر هم بلند حرف بزنن، حرف همدیگه رو نمیفهمن! شما نمیتونید یک آبجکت پایتون رو مستقیم بفرستید توی مرورگر و انتظار داشته باشید نمایش داده بشه. چون مرورگر ها و موبایل ها زبونی به اسم "آبجکت پایتون" رو بلد نیستن. ما نیاز به یک مترجم داریم که وسط بایسته، حرف های پایتون رو بگیره و به یک استاندارد متنی (Json) تبدیل کنه. به این مترجم هوشمند توی جنگو رست Serializer  میگیم.

سریالایزر (Serializer) چیست؟

سریالایزر در واقع همون مترجم دنیای DRF است. وظیفه اصلیش اینه که داده های پیچیده ی  پایتونی رو (مثل QuerySetها و نمونه ‌های مدل) بگیره و به فرمتی تبدیل کنه که برای فرانت اند قابل فهم باشه.

به زبان ساده سریالایزر دو تا کار اصلی انجام میده :

۱.Serialization (ترجمه برای خروج) :‌ وقتی میخوایم اطلاعات رو به کاربر نشون بدیم، آبجکت های پایتون رو به (Json) تبدیل میکنه.

۲.Deserialization (ترجمه برای ورود) :‌ وقتی کاربر اطلاعاتی رو میفرسته (مثلا فرم ثبت نام)، داده های json رو میگیره، چک میکنه، و به آبجکت پایتون تبدیل میکنه تا توی دیتابیس ذخیره بشه.

انواع سریالایزر ها در Django Rest Framework

انواع سریالایزر ها در Django Rest Framework

جنگو رست دو روش اصلی برای ساخت این مترجم ‌ها جلوی پای ما میذاره:

۱. Serializer (روش دستی و دقیق) :  این کلاس پایه است. خیلی شبیه به فرم ‌های معمولی جنگو (forms.Form) عمل میکنه.

چطور کار میکنه؟ باید تک ‌تک فیلد هایی که میخوای ترجمه بشن رو دستی تعریف کنی.

مزیت: کنترل صد در صدی روی همه چیز داری. اگر داده‌ ای داری که دقیقاً توی دیتابیس نیست (مثلاً یک فرم تماس با ما که ذخیره نمیشه و فقط ایمیل میشه)، این بهترین گزینست.

ایراد: کد نویسی زیاد! باید برای هر فیلد کلی کد بزنی.

۲. ModelSerializer (روش هوشمند و سریع) :  این محبوب ‌ترین روشه و شبیه به forms.ModelForm در جنگو هست.

چطور کار میکنه؟ شما فقط بهش میگی "برو از روی مدلِ User یه سریالایزر بساز". خودش اتوماتیک فیلد ها رو شناسایی میکنه و کد های لازم رو مینویسه.

مزیت: سرعت توسعه رو وحشتناک بالا میبره و کد های تکراری رو حذف میکنه. متد های create و update رو هم خودش پیش ‌فرض داره.

کاربرد: تقریباً در ۹۰٪ مواقعی که با دیتابیس سر و کار دارید، از همین استفاده میکنید.

نحوه تبدیل مدل به json در جنگو رست فریمورک

چطور یک سریالایزر بسازیم؟‌

فرض کن یک مدل برای "مقاله" (Article) داریم. برای اینکه بتونیم این مقالات رو به صورت JSON بفرستیم، باید توی فایل serializers.pyکدی شبیه به این بنویسیم:

from rest_framework import serializers
from .models import Article

class ArticleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Article
        fields = ['id', 'title', 'content', 'author']

به همین سادگی! حالا جنگو رست میدونه که چطور مدل مقاله رو به JSON تبدیل کنه.

نحوه اعتبارسنجی (Validation) در جنگو رست فریمورک

اعتبارسنجی (Validation)

سریالایزر فقط یک مترجم ساده نیست؛ یک بازرس هم هست. وقتی کاربر داده‌ای رو میفرسته (Deserialization)، سریالایزر قبل از اینکه اجازه بده داده وارد دیتابیس بشه، اون رو چک میکنه.

آیا ایمیل فرمت درستی داره؟

آیا پسورد کوتاه نیست؟

آیا فیلد اجباری پر شده؟

اگر داده‌ ها مشکل داشته باشن، سریالایزر به صورت خودکار یک ارور استاندارد و تمیز به کاربر برمیگردونه و از ورود داده‌ های کثیف به دیتابیس جلوگیری میکنه.

جمع بندی

انتخاب نوع سریالایزر به نیاز شما بستگی داره :‌

اگر با مدل های دیتابیس کار میکنید و میخواید سریع کد بزنید : ModelSerializer

اگر داده‌ های عجیب و غریب دارید یا نیاز به کنترل خیلی خاص دارید: Serializer معمولی.

در واقع سریالایزر، پل ارتباطی امن و منظمی هست که باعث میشه بک ‌اند پایتونی شما بتونه با هر نوع فرانت ‌اندی (React, Vue, Android, iOS) به راحتی صحبت کنه.