Telegram Group & Telegram Channel
Python Hints
#Quick مثالی برای یک بحث: یک سری سوالات هست توی مصاحبه که واقعاً نیاز به درک درست از چندین جنبه داره. یک مثال میزنم و بعدش دیگه این سوال رو از مصاحبه‌هام حذف می‌کنم : مثلاً توی بکند؛ چرا به سریالایزر نیاز داریم ؟ من مدل دیتابیس رو دارم پکیج‌های مورد نیاز…
جواب این سوال ساده هست ولی من با یک مثال مهمترین دلایلش رو می‌گم :

توی فریمورکی مثل جنگو که اگر کار کرده باشید؛ حتما سریالایزر رو دارید؛ توی پایتون جا افتاده که برای باقی فریمورک‌ها هم از همین اسم استفاده می‌کنند.
فرض کنیم من از کاربر ۵ تا اطلاعات میگیریم تا رجیسترش کنم
{
"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 رو هم خواهید داشت.

به لطف جنگو شماه هیچکدوم ازین موارد رو نمی‌بینید اما توی فریمورک‌های دیگه باید با این مفاهیم آشنا باشید تا به درستی پیاده‌سازی کنید.



tg-me.com/pyHints/666
Create:
Last Update:

جواب این سوال ساده هست ولی من با یک مثال مهمترین دلایلش رو می‌گم :

توی فریمورکی مثل جنگو که اگر کار کرده باشید؛ حتما سریالایزر رو دارید؛ توی پایتون جا افتاده که برای باقی فریمورک‌ها هم از همین اسم استفاده می‌کنند.
فرض کنیم من از کاربر ۵ تا اطلاعات میگیریم تا رجیسترش کنم

{
"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 رو هم خواهید داشت.

به لطف جنگو شماه هیچکدوم ازین موارد رو نمی‌بینید اما توی فریمورک‌های دیگه باید با این مفاهیم آشنا باشید تا به درستی پیاده‌سازی کنید.

BY Python Hints


Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283

Share with your friend now:
tg-me.com/pyHints/666

View MORE
Open in Telegram


Python Hints Telegram | DID YOU KNOW?

Date: |

A project of our size needs at least a few hundred million dollars per year to keep going,” Mr. Durov wrote in his public channel on Telegram late last year. “While doing that, we will remain independent and stay true to our values, redefining how a tech company should operate.

That growth environment will include rising inflation and interest rates. Those upward shifts naturally accompany healthy growth periods as the demand for resources, products and services rise. Importantly, the Federal Reserve has laid out the rationale for not interfering with that natural growth transition.It's not exactly a fad, but there is a widespread willingness to pay up for a growth story. Classic fundamental analysis takes a back seat. Even negative earnings are ignored. In fact, positive earnings seem to be a limiting measure, producing the question, "Is that all you've got?" The preference is a vision of untold riches when the exciting story plays out as expected.

Python Hints from hk


Telegram Python Hints
FROM USA