<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های سپهر حضاری</title>
        <link>https://virgool.io/feed/@sepehrhozzari99</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-16 14:55:58</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/1622274/avatar/sLyfot.jpeg?height=120&amp;width=120</url>
            <title>سپهر حضاری</title>
            <link>https://virgool.io/@sepehrhozzari99</link>
        </image>

                    <item>
                <title>بهترین روش ها (best practices) برای جنگو رست فریم ورک</title>
                <link>https://virgool.io/@sepehrhozzari99/%D8%A8%D9%87%D8%AA%D8%B1%DB%8C%D9%86-%D8%B1%D9%88%D8%B4-%D9%87%D8%A7-best-practices-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%AC%D9%86%DA%AF%D9%88-%D8%B1%D8%B3%D8%AA-%D9%81%D8%B1%DB%8C%D9%85-%D9%88%D8%B1%DA%A9-ljjjsowbcykx</link>
                <description>سلام سپهر هستماینم اولین مقاله ای هست که دارم مینویسم :) پس اگر ایرادی داشت حتما تو کامنت ها نظرتون رو بگینخب بریم سر اصل مطلباستفاده از 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 های جنگو رست فریم ورک که البته ما خیلی بخش کوچیک اش رو بررسی کردیم و شما خودتون با مطالعه میتونین خیلی بیشتر هم یاد بگیریناینم اکانت گیت هابم اونجا این نمونه کد  ها و خیلی ریپازیتوری های دیگه هستن که میتونین ببینید</description>
                <category>سپهر حضاری</category>
                <author>سپهر حضاری</author>
                <pubDate>Sat, 07 May 2022 23:17:22 +0430</pubDate>
            </item>
            </channel>
</rss>