جواب این سوال ساده هست ولی من با یک مثال مهمترین دلایلش رو میگم :
توی فریمورکی مثل جنگو که اگر کار کرده باشید؛ حتما سریالایزر رو دارید؛ توی پایتون جا افتاده که برای باقی فریمورکها هم از همین اسم استفاده میکنند.
فرض کنیم من از کاربر ۵ تا اطلاعات میگیریم تا رجیسترش کنم
{
"first_name": "Mo",
"last_name": "abbasi",
"channel": "pyhints",
"email": "[email protected]",
"phone": "09122020200"
}
این برای ثبتنام هست؛ برای لاگین :
{
"phone": "09122020200"
}
مشاهده پروفایل توسط دیگران:
{
"first_name": "Mo",
"last_name": "abbasi",
"channel": "pyhints",
}
ادیت پروفایل:
{
"first_name": "Mo",
"last_name": "abbasi",
"channel": "pyhints",
"phone": "09122020200"
}
همهی این موارد با یک فیلد کم و زیاد کاملا مشابه هم هستند؛ اگر سریالایزر نبود برای ولیدکردن شماره تماس چون دیتا از نوع str هست هربار باید یادم بمونه که کدهای مربوط به ولید کردنش رو اجرا بذارم اگر یادم بره چی میشه ؟
شخص با شمارهای که ولید نیست توی سیستم ثبتنام میشه و دیگه هیچوقت نمیتونه وارد سیستم بشه.
اما با وجود سریالایزر اگر جایی از کد ببینم دولوپری دیتای request رو داره میخونه فارغ از اینکه چیکار داره میکنه کد رو ناامن و همراه باگ میدونم.
همین ۱ مورد دوتا ویژگی خوب به من میده :
۱- ولیدیشن اصولی و یکپارچه برای کل سیستم
۲- عدم تکرار کد
اما کارهای دیگهای هم هست که میشه کرد؛ فرض کنید یک دیتاتایپ خاص خودتون رو دارید و سمت دیتابیس با
extension
های مربوطه اضافه شده؛ به کمک سریالایزر میتونید مطمئن بشید اگر یک
tuple
براتون ارسال شده حتما از اون دیتاتایپ مدنظر هست (مثال
vector2d
جلسات کتابخونی رو یادتون هست ؟)
دیگه چکاری میشه کرد ؟
فرض کنید یک باگ توی دیتابیس پیدا شد یا یک نوع حمله مثل
SQL Injection
اونوقت فقط کافیه یکبار روی
Base Serializer
این مورد رو بررسی کنید و جلوگیری کنید (مثلا برای فیلد ایمیل / اسمها) بعد هرجا برای فیلد ایمیل یا اسمها ازین
inherit
میکنید بصورت خودکار
SQL Injection prevention
رو هم خواهید داشت.
به لطف جنگو شماه هیچکدوم ازین موارد رو نمیبینید اما توی فریمورکهای دیگه باید با این مفاهیم آشنا باشید تا به درستی پیادهسازی کنید.