سپهر حضاری
سپهر حضاری
خواندن ۲ دقیقه·۳ سال پیش

بهترین روش ها (best practices) برای جنگو رست فریم ورک

سلام سپهر هستم

اینم اولین مقاله ای هست که دارم مینویسم :) پس اگر ایرادی داشت حتما تو کامنت ها نظرتون رو بگین


خب بریم سر اصل مطلب


استفاده از SerializerMethodField

خیلی مواقع مادل شما ForeignKey یا ManyToMany فیلد هایی رو برای مادل های دیگری داره و وقتی میخواین به صورت API نشون بدین اونجا فقط آیدی رو نشون میده مثل مثال زیر

خب این خوب نیست ما میخوایم که نام کاربری و ایمیل کسی که این مقاله رو نوشته رو نشون بدیم نه آیدی چون بیچاره کاربر از کجا بفهمه کی این مقاله رو نوشته?

اینجاست که SerializerMethodField وارد کار میشه


همین :) حالا خروجی کار

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

خب بریم بعدی


استفاده از ViewSet ها

در واقع ViewSet به زبان ساده میاد یکسری Mixin هایی رو کنار هم میزاره مانند CreateModelMixin یا UpdateModelMixin و ..... همراه با یک کلاس دیگه به اسم GenericViewSet که اونم از یه کلاس دیگه ای ارث بری میکنه که میاد کل اکشن هارو برای ما هندل میکنه مثل create و update و اکشن های دیگه. البته میتونین اینارو محدود کنین یا کاستومایزش کنین

خب شاید بگین چرا باید از ViewSet استفاده بکنیم؟؟؟؟؟

باید در جوابش این رو بگم که ViewSet ها کار مارو خیلی خیلی ساده تر و کد مارو خیلی تمیز تر میکنن یعنی شما برای چهار عمل اصلی اگر بخواین چهار تا APIView بنویسین توی یک ViewSet هندلش میکین البته هرچند بعضی مواقع بهتره از ViewSet استفاده نکنین و از APIView استفاده بکنین

اینجا تو ۳ خط کد کل اکشن هارو هندل کردید?

دلیل بعدی که خیلی دلیل خوبی هم هست ViewSet ها به شما اجازه استفاده از router رو هم میدن

درواقع router میاد url هارو به صورت اتوماتیک میسازه و دیگه شما نیاز نیست با url ور برید یه router رجیستر میکنید میاد براتون url هارو میسازه اونم با نام گذاری اصولی!!!!!

البته ViewSet ها خیلی امکانات بیشتری هم دارن که خودتون با مطالعه میتونین بهش برسین

و اینکه خب یکسیری جاها استفاده از ViewSet شاید بهترین راه حل نباشه


اعتبار سنجی فیلد ها (Serializer Field Validation)

مثلا فرض کنید نمیخواید کاربرتون توی تایتل مقاله اسم php رو بیاره? خب باید چه کرد

راه حلش ساده هست

اینجا تنها کاری که شما باید انجام بدید اینه که یک فانکشن بنویسید که دو پارامتر self و value رو بگیره value همون تایتل مقاله هستش بعدش هر اعتبارسنجی خواستین میتونین انجام بدین

مثلا اینجا یک لیستی از کلمه های فیلتر شده رو داشتیم یه for زدیم گفتیم اگر این کلمه ممنوع مثل PHP توی تایتل مقاله یا همون value بود یه ارور اعتبارسنجی یا همون ValidationError رو raise کنه همین


خب این بود از سه تا best practice های جنگو رست فریم ورک که البته ما خیلی بخش کوچیک اش رو بررسی کردیم و شما خودتون با مطالعه میتونین خیلی بیشتر هم یاد بگیرین

اینم اکانت گیت هابم اونجا این نمونه کد ها و خیلی ریپازیتوری های دیگه هستن که میتونین ببینید

djangorest api
شاید از این پست‌ها خوشتان بیاید