<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های میلاد حاتمی</title>
        <link>https://virgool.io/feed/@miladhzz</link>
        <description>در حال یادگیری بهتر Django</description>
        <language>fa</language>
        <pubDate>2026-06-16 10:45:51</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/49746/avatar/YrXQMq.jpeg?height=120&amp;width=120</url>
            <title>میلاد حاتمی</title>
            <link>https://virgool.io/@miladhzz</link>
        </image>

                    <item>
                <title>کتاب طراح سایت - پودمان 5 - نصب آفلاین جنگو - قسمت 4</title>
                <link>https://virgool.io/@miladhzz/%DA%A9%D8%AA%D8%A7%D8%A8-%D8%B7%D8%B1%D8%A7%D8%AD-%D8%B3%D8%A7%DB%8C%D8%AA-%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86-5-%D9%86%D8%B5%D8%A8-%D8%A2%D9%81%D9%84%D8%A7%DB%8C%D9%86-%D8%AC%D9%86%DA%AF%D9%88-%D9%82%D8%B3%D9%85%D8%AA-4-inij03nteiyl</link>
                <description>در این ویدئو که توسط مولف پودمان 5 کتاب طراح سایت پایه یازدهم تولید شده است.ابتدا با دستور pip download آشنا خواهید شد، سپس وابستگی های نصب جنگو توضیح داده شده است. در انتهای ویدئو، با استفاده از فایل های دانلود شده، جنگو و وابستگی های آن نصب می شوند.لینک ویدئو:https://www.aparat.com/v/gbsuln9👈ویدئو حدودا 6 دقیقهجنگولرن در بله https://ble.ir/DjangoLearnجنگولرن در ایتا https://eitaa.com/DjangoLearnجنگولرن در شاد https://shad.ir/DjangoLearn</description>
                <category>میلاد حاتمی</category>
                <author>میلاد حاتمی</author>
                <pubDate>Mon, 08 Jun 2026 15:22:27 +0330</pubDate>
            </item>
                    <item>
                <title>کتاب طراح سایت - پودمان 5 - نصب جنگو با نت ملی - قسمت 3</title>
                <link>https://virgool.io/@miladhzz/%DA%A9%D8%AA%D8%A7%D8%A8-%D8%B7%D8%B1%D8%A7%D8%AD-%D8%B3%D8%A7%DB%8C%D8%AA-%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86-5-%D9%86%D8%B5%D8%A8-%D8%AC%D9%86%DA%AF%D9%88-%D8%A8%D8%A7-%D9%86%D8%AA-%D9%85%D9%84%DB%8C-%D9%82%D8%B3%D9%85%D8%AA-3-dcxbn9ubqkn6</link>
                <description>این آموزش توسط مولف پودمان 5 ضبط شده است.✅لینک ویدئو:https://www.aparat.com/v/kgt63qm👈ویدئو حدودا 5 دقیقهتوضیحات:در این ویدئو که توسط مولف پودمان 5 کتاب طراح سایت پایه یازدهم تولید شده است.ابتدا توضیحات مختصری در مورد مفهوم میرور ارائه شده است. سپس بعد از معرفی چند میرور داخلی، حذف جنگو آموزش داده شده است. در انتهای ویدئو، جنگو با استفاده از میرورهای داخلی و نت ملی نصب می شود.جنگولرن در بله https://ble.ir/DjangoLearnجنگولرن در ایتا https://eitaa.com/DjangoLearnجنگولرن در شاد https://shad.ir/DjangoLearn</description>
                <category>میلاد حاتمی</category>
                <author>میلاد حاتمی</author>
                <pubDate>Mon, 08 Jun 2026 15:21:12 +0330</pubDate>
            </item>
                    <item>
                <title>کتاب طراح سایت - پودمان 5 - نصب جنگو - قسمت 2</title>
                <link>https://virgool.io/@miladhzz/%DA%A9%D8%AA%D8%A7%D8%A8-%D8%B7%D8%B1%D8%A7%D8%AD-%D8%B3%D8%A7%DB%8C%D8%AA-%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86-5-%D9%86%D8%B5%D8%A8-%D8%AC%D9%86%DA%AF%D9%88-%D9%82%D8%B3%D9%85%D8%AA-2-jqloitnk3ai7</link>
                <description>این آموزش توسط مولف پودمان 5 ضبط شده است.✅لینک ویدئو:https://aparat.com/v/mri45c0توضیحات:در این ویدئو که توسط مولف پودمان 5 کتاب طراح سایت پایه یازدهم تولید شده است.ابتدا با مفهوم نسخه های LTS آشنا می شوید، سپس سایت pypi معرفی می شود. در ادامه ترمینال و cmd توضیح داده شده است. پس از این مراحل، نسخه نصب شده پایتون بررسی می گردد و در انتهای ویدئو جنگو نصب می شود.@djangolearn</description>
                <category>میلاد حاتمی</category>
                <author>میلاد حاتمی</author>
                <pubDate>Mon, 08 Jun 2026 15:19:47 +0330</pubDate>
            </item>
                    <item>
                <title>کتاب طراح سایت - پودمان 5 - معرفی جنگو - قسمت 1</title>
                <link>https://virgool.io/@miladhzz/%DA%A9%D8%AA%D8%A7%D8%A8-%D8%B7%D8%B1%D8%A7%D8%AD-%D8%B3%D8%A7%DB%8C%D8%AA-%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86-5-%D9%85%D8%B9%D8%B1%D9%81%DB%8C-%D8%AC%D9%86%DA%AF%D9%88-%D9%82%D8%B3%D9%85%D8%AA-1-ubbhgiksaez8</link>
                <description>این آموزش توسط مولف پودمان 5 ضبط شده است.لینک ویدئو:https://www.aparat.com/v/szetrycزمان ویدئو: حدودا 9 دقیقهتوضیحات:در این ویدئو که توسط مولف پودمان 5 کتاب طراح سایت پایه یازدهم تولید شده است.ابتدا توضیحاتی در مورد جنگو، مزایای جنگو و شرکت های معتبری که از جنگو استفاده کرده اند، ارائه شده است.سپس انواع فریمورک و تفاوت بین کتابخانه و فریمورک بیان شده است. در انتهای ویدئو مفهوم فریمورک توضیح داده شده است.910گروه جنگوچت  https://ble.ir/djangochatکانال جنگولرن در بله، ایتا، شاد @djangolearn</description>
                <category>میلاد حاتمی</category>
                <author>میلاد حاتمی</author>
                <pubDate>Mon, 08 Jun 2026 15:17:27 +0330</pubDate>
            </item>
                    <item>
                <title>تجربه مصاحبه شرکت همکاران سیستم</title>
                <link>https://virgool.io/@miladhzz/%D8%AA%D8%AC%D8%B1%D8%A8%D9%87-%D9%85%D8%B5%D8%A7%D8%AD%D8%A8%D9%87-%D8%B4%D8%B1%DA%A9%D8%AA-%D9%87%D9%85%DA%A9%D8%A7%D8%B1%D8%A7%D9%86-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-frhjcugvuogc</link>
                <description>مصاحبه به صورت آنلاین و با اسکای روم برگزار شد. ۲ نفر مصاحبه کننده بودن.طبق معمول خودتون رو معرفی کنید و توضیح بدید کجاها کار کردید و...بعد از صحبت های من، تمرکزشون روی این بود که چرا توی ۶ سال و نیم ۵ تا شرکت عوض کردی!!!و مثلا یکی گفت وقتی تو ۶ سال پیش رفتی فلان شرکت. من همکاران سیستم بودم. تو ۵ شرکت عوض کردی و من هنوز همکاران سیستم موندم.گفتم خب شما بگو چرا جابجا نشدی؟ :Dواقعا نمی فهمم این چه سوالیه؟ خب من ۲ سال توی سان بودم. و اگه شرایط خوبی برای من محیا می شد، قطعا شاید هنوز سان بودم.البته از صحبت هاشون متوجه شدم که توی همکاران سیستم کارها تلنبار شده و شاید برای مرخصی گرفتن باید خجالت کشید، چیزی که خیلی روی مخ منه.خیلی بحث کردیم در این مورداما بگذریم...بعدش سوالات فنی شروع شد.یه Editor آنلاین باز کرد و یه مساله داد. گفت اینو حل کن و میشه شبهه کد بنویسیمساله:فرض کن ما دو تا کلمه داریم. مثلا rightt و ighrt می خواهیم ببینیم آیا همه کاراکتر های اولی توی دومی هستن؟ تکرار هم لحاظ بشهیعنی توی اولی دو تا t داریم. دومی هم دو تا t داشته باشه.با بدبختی و استفاده از for حلش کردم که حال نکرد باهاشسوال بعدش در مورد تفاوت IEnumerable و IQueryable بود. که ۱۰۰ باز ازم پرسیده شده تا حالابعد یه کد نوشت در مورد IEnumerable و دو تا سوال پرسید که جواب دادمبعدش سوال در مورد شی گرایی و ارث بری کرد.کلاس A رو داریم و B ازش ارث بری کردهوقتی آبجکت از B می سازیم آیا Constructor کلاس A هم اجرا میشه؟سوال بعدی: آیا میشه Constructor رو private  تعریف کنیم؟سوال بعدی: پترن Singleton چیه و چه کاربردی داره؟ اینو مسلط نبودم و خیلی ازش پرسیدنسوال بعدی: انواع Index توی دیتابیس چیه؟ چطور پرفورمنس کوئری هارو اوکی می کنی و ... که گفتم من بلد نیستم :Dدر آخرش هم کتاب C# in a Nutshell رو بهم توصیه کرد که بخونم :Dبعد از بحث هایی که داشتیم، خواستم ادامه ندم. ولی چون بی احترامی میشد چیزی نگفتم + کنجکاو بودم که سوالات فنی چی میخواد باشه </description>
                <category>میلاد حاتمی</category>
                <author>میلاد حاتمی</author>
                <pubDate>Wed, 01 Mar 2023 15:57:36 +0330</pubDate>
            </item>
                    <item>
                <title>تجربه مصاحبه برنامه نویس شرکت رایان پژوه سلامت</title>
                <link>https://virgool.io/@miladhzz/%D8%AA%D8%AC%D8%B1%D8%A8%D9%87-%D9%85%D8%B5%D8%A7%D8%AD%D8%A8%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3-%D8%B4%D8%B1%DA%A9%D8%AA-%D8%B1%D8%A7%DB%8C%D8%A7%D9%86-%D9%BE%DA%98%D9%88%D9%87-%D8%B3%D9%84%D8%A7%D9%85%D8%AA-n2fecfcpq2ne</link>
                <description>اولین جلسه مصاحبه به صورت آنلاین و تصویری با مسئول منابع انسانی شرکت بود.سوالات کلی پرسیدن. از قبیل: چرا میخوای از شرکت بری، دستاوردت توی چند سال اخیر چی بوده و...جلسه بعدی به صورت حضوری و در محل شرکت بودشرکت یک واحد کوچیک بود. برنامه نویس ها خیلی فشرده کنار هم بودن. از وسط برنامه نویس ها رد شدم و رفتم اتاق مدیر عامل برای مصاحبه !!!مدیرعامل آدم باحالی بود و کلی خندیدیمسوال فنی خاصی نپرسید. فقط در مورد اینکه چکارها کردی تا حالا و ...در آخر یه سوال پرسید و گفت فرض کن یه جدول داریم که کلید اصلی از نوع int هست و از ۱ شروع شده تا سقف int رسیده و الان دیگه رکورد جدید بهش اضافه نمیشه. جداول خیلی زیادی هم به این جدول ریلیشن دارن !!!!چکار میکنی که مشکل برطرف بشه؟ من راه حل های مختلفی گفتم. و البته گفتم تخصص من دیتابیس نیست.</description>
                <category>میلاد حاتمی</category>
                <author>میلاد حاتمی</author>
                <pubDate>Sat, 25 Feb 2023 11:01:39 +0330</pubDate>
            </item>
                    <item>
                <title>تجربه مصاحبه برنامه نویس دات نت کارگزاری مفید</title>
                <link>https://virgool.io/@miladhzz/%D8%AA%D8%AC%D8%B1%D8%A8%D9%87-%D9%85%D8%B5%D8%A7%D8%AD%D8%A8%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3-%D8%AF%D8%A7%D8%AA-%D9%86%D8%AA-%DA%A9%D8%A7%D8%B1%DA%AF%D8%B2%D8%A7%D8%B1%DB%8C-%D9%85%D9%81%DB%8C%D8%AF-zqzba2ab4mt9</link>
                <description>جلسه به صورت آنلاین و اسکایپی برگزار شدخودتون رو معرفی کنید و ... (همون چیزایی که توی رزومه کاااامل نوشتم)چرا اینقدر زود شرکت عوض کردید (سان ۲سال. گاج۶ماه. موج صنعت۱۰ماه. سیگما۲سال)میکروسرویس بلدی؟ فقط مفاهیمش رو میدونم و توضیح دادممزایا و معایبش رو بگو لطفا.با لاگ کار کردی . NLog, Serilogاگه یه اکشن داشته باشه و بخوای بدون اینکه بدنه اش رو تغییر بدی ورودی یا خروجی اش رو عوض کنی چکار میکنی. گفتم فیلتر و میدلور استفاده میکنمدو تا string رو بخوای به هم بچسبونی چکار میکنی؟تفاوت string builder و concat و $ و + چیه؟با دیتابیس کار کردی؟ انواع تریگر ها رو بگوبا کدوم دیزاین پترن ها آشنا هستی؟ singleton چطوریه؟ یه چیزی در مورد lock گفتم گیر داد شیر کن ببینم منظورت چیه و آخرش گفت که lock رو نیاز نداره. به نظرم باید بازم بخونمشفرق async void و async task چیه؟در مورد CQRS چی میدونی؟ گفتم هیچی. هر چی هم میدونستم یادم رفته :)به نظرت سال آینده چیو مسلط هستی؟چطور خودت رو آپدیت میکنی؟ در آخر گفت سوالی داری؟ گفتم من همکارتون بشم میکروسرویس یاد میگیرم؟ گفت یه پروژه مونولیتیک داریم میخوایم میکروسرویسش کنیم.گفتم ریموتی هستید؟ گفت هم ریموتی هم هیبرید. بستگی به نظر لید داره.</description>
                <category>میلاد حاتمی</category>
                <author>میلاد حاتمی</author>
                <pubDate>Wed, 08 Feb 2023 16:11:27 +0330</pubDate>
            </item>
                    <item>
                <title>تجربه مصاحبه برنامه نویس دات نت شرکت ایران هتل آنلاین</title>
                <link>https://virgool.io/@miladhzz/%D8%AA%D8%AC%D8%B1%D8%A8%D9%87-%D9%85%D8%B5%D8%A7%D8%AD%D8%A8%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3-%D8%AF%D8%A7%D8%AA-%D9%86%D8%AA-%D8%B4%D8%B1%DA%A9%D8%AA-%D8%A7%DB%8C%D8%B1%D8%A7%D9%86-%D9%87%D8%AA%D9%84-%D8%A2%D9%86%D9%84%D8%A7%DB%8C%D9%86-bylrof8yv51e</link>
                <description>مصاحبه به صورت آنلاین و در بستر گوگل میت بود.در حد ده دقیقه تاخیر داشتن.برنامه نویسی ارشد یا احتمالا لید تیم خیلی سریع رفتن سراغ سوالات زیر:از آخرین شغلت و وظایف و دستاوردات بگو (دستاورد چیزیه که اسم تو روش باشه و خیلی ها بعد تو ازش استفاده کرده باشن و کارشون رو راحت کرده باشی)چرا میخوای از شرکت بیای بیرون؟ گفتم کار بهتر و پول بیشتربا ef core کار کردی؟ مزیتش نسبت به dapper چیه؟ چه قابلیت هایی داره که تو تحسینش کنی؟اگه بخوای یه پروژه بزرگ که قراره کاربرهای زیادی رو هندل کنه بسازی پیشنهادت چیه؟ گفتم من برنامه نویسم معمار که نیستم. هرچند ابزارهایی میشناسم برای این کار. اما تجربه ای ندارمفرق sync و async چیه؟در مورد لزوم دونستن مایکروسرویس ها گفت و مثال زد که باید بدونی و... ولی من هنوز یه ویدئو از میکروسرویس هم ندیدم.پرسید رست میدونی چیه و...و پرسید چطور خودت رو آپدیت میکنی و آخرین مقاله ای که خوندی چیه؟ گفتم آخرین کتابی که دارم میخونم Art of unit testing هست.در نهایت خیلی محترمانه گفت برای کار ما دانش کمی داری. و استقبال کردم از این حرکتش. کاش همه آخر مصاحبه رک بگن نمیخوایمت :) این شرکت توی مشهده و کار هم فول ریموت بود</description>
                <category>میلاد حاتمی</category>
                <author>میلاد حاتمی</author>
                <pubDate>Wed, 25 Jan 2023 00:01:31 +0330</pubDate>
            </item>
                    <item>
                <title>چطور تغییرات Stash شده در Git را به کامپیوتر دیگر منتقل کنیم</title>
                <link>https://virgool.io/@miladhzz/%DA%86%D8%B7%D9%88%D8%B1-%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1%D8%A7%D8%AA-stash-%D8%B4%D8%AF%D9%87-%D8%AF%D8%B1-git-%D8%B1%D8%A7-%D8%A8%D9%87-%DA%A9%D8%A7%D9%85%D9%BE%DB%8C%D9%88%D8%AA%D8%B1-%D8%AF%DB%8C%DA%AF%D8%B1-%D9%85%D9%86%D8%AA%D9%82%D9%84-%DA%A9%D9%86%DB%8C%D9%85-ljfaxhgyxvwc</link>
                <description>فرض کنید تغییراتی روی پروژه داشتید و به هر دلیلی اونارو با دستور git stash به stash اضافه کردید (فارسی انگلیسی کنار هم سخته)حالا به هر دلیل دیگه ای میخواهید که این تغییرات رو توی فولدر دیگه یا کامپیوتر دیگری منتقل کنید. (دیدم که میگم)یک راهش اینه که کل فولدر گیت (که مخفی هست) رو کپی کنید. که واقعا راه خوبی نیست.راه دومش export کردن تغییرات stash شده در git با دستورات خود git هست. مسیر زیر رو ببینید (اول stash کنید):git stash show &quot;stash@{0}&quot; -p &gt; changes.patch git apply changes.patchهمونطوری که مشخصه بعد از stash کردن هر stash یک Revision داره که اینجا stash@{0} هست. با این میتونید به stash مد نظرتون اشاره کنید.بعد از اجرای این خط یه فایل به اسم changes.patch کنار فولدر گیت (که مخفی هست) ساخته میشه. میتونید اینو کپی کنید و کنار فولدر git مقصد بزارید و دستور آخر رو اجرا کنید.برای من که جالب بود. امیدوارم برای شما هم جالب بوده باشه :)لینک کد</description>
                <category>میلاد حاتمی</category>
                <author>میلاد حاتمی</author>
                <pubDate>Tue, 29 Nov 2022 10:31:17 +0330</pubDate>
            </item>
                    <item>
                <title>چرا در جنگو باید مراقب SECRET_KEY باشیم؟</title>
                <link>https://virgool.io/@miladhzz/%DA%86%D8%B1%D8%A7-%D8%AF%D8%B1-%D8%AC%D9%86%DA%AF%D9%88-%D8%A8%D8%A7%DB%8C%D8%AF-%D9%85%D8%B1%D8%A7%D9%82%D8%A8-secretkey-%D8%A8%D8%A7%D8%B4%DB%8C%D9%85-ta0xxsxa1psl</link>
                <description>اگه دقت کرده باشید توی فایل settings.py در جنگو خیلی تاکید شده که مراقب SECRET_KEY باشید. به جای اینکه دلایل رو توضیح بدم، لینک کدهای  جنگو که صراحتا  SECRET_KEY رو استفاده کردن اینجا میگذارم. بد نمیشه یه نگاه بندازید. (لینک ها همه مربوط به ریپازیتوری اصلی جنگو و نسخه 3.1.x هستن)1- https://github.com/django/django/blob/stable/3.1.x/django/contrib/auth/tokens.py2- https://github.com/django/django/blob/stable/3.1.x/django/core/checks/security/base.py3- https://github.com/django/django/blob/stable/3.1.x/django/core/signing.py4- https://github.com/django/django/blob/stable/3.1.x/django/utils/crypto.py</description>
                <category>میلاد حاتمی</category>
                <author>میلاد حاتمی</author>
                <pubDate>Mon, 16 Aug 2021 16:14:06 +0430</pubDate>
            </item>
                    <item>
                <title>چند مورد از Best Practice های توسعه در جنگو به همراه جایزه</title>
                <link>https://virgool.io/coderlife/%DA%86%D9%86%D8%AF-%D9%85%D9%88%D8%B1%D8%AF-%D8%A7%D8%B2-best-practice-%D9%87%D8%A7%DB%8C-%D8%AA%D9%88%D8%B3%D8%B9%D9%87-%D8%AF%D8%B1-%D8%AC%D9%86%DA%AF%D9%88-%D8%A8%D9%87-%D9%87%D9%85%D8%B1%D8%A7%D9%87-%D8%AC%D8%A7%DB%8C%D8%B2%D9%87-z5xkys1saq78</link>
                <description>Django Best-practicesمطلب زیر جمع آوری نظرات کاربران کانال تلگرامی Django Expert با آدرس https://t.me/djangoex هست.یکی از ادمین های این کانال پستی به عنوان مسابقه در این لینک در کانال منتشر کرده و قراره جایزه هم بده.با توجه به اینکه پاسخ ها به این مطلب از سمت افرادی هست که تجربه واقعی کار با فریمورک جنگو رو دارند، فکر کردم که بهتره پاسخ هارو با ذکر نام کاربر منتشر کنم، تا شاید برای دیگران هم مفید باشه.من پاسخ ها به این پست رو منتشر می کنم (البته با یکم ویرایش) و هیچکدام از این موارد رو تایید و یا رد نمی کنم. اما کلیات مطلب رو مناسب دیدم و میتونه برای علاقمندان به جنگو مناسب باشه.سوال: یکی از best-practiceهایی که در هنگام توسعه اپلیکیشن های django یاد گرفتید و استفاده کردید را توضیح دهید.کاربر Farid:یکی از بهترین پرکتیس هایی که یاد گرفتم اینه:In DRF, it&#x27;s better to have more views designed to be as atomic as possible than a few views with many optionsدر ادامه:If a serializer is troublesome and is outrageously complex, why not break it up into two different serializers for the same model ?از فواید این پرکتیس:1) داکیومنتیشن راحت تر و سریعتره چون هر کامپوننت کار کمتری انجام میده2) تست راحت تر3) باتل نک ها یا گلوگاه ها راحتتر resolve میشن4) امنیتش هم بالاتره چون دسترسی ها رو به ازای هر ویو تغییر میدیم ( به جای کنترل دسترسی از طریق کد نوشتن توی ویو )کاربر Ali:این متن از کتاب two scoops of django هستش که برای best practice خیلی کتاب خوبیهIn essence, each app should be tightly focused on its task. If an app can’t be explained ina single sentence of moderate length, or you need to say ‘and’ more than once, it probablymeans the app is too big and should be broken up.کمکی که به من کرده اینه می‌تونم از اپی که ساختم توی پروژه های مختلف استفاده کنم.کاربر Parsa:&quot;Fat Models, skinny views&quot;یکی از مفید ترین practice ها برای من بود که به جای اینکه یک سری logic رو در viewهامون تکرار کنیم، میایم و logic رو در modelها یا model manager ها قرار می دهیم.که با این کار :1- از اصل DRYپیروی می کنیم.2- همچنین کد ما قابل تست کردن هست.3- کد ما maintainableو extensible هست.کاربر Yaser Rahimi:فانکشنی که طولش بیشتر از یه صفحه بشه یجای کارش میلنگهکاربرABB ♾:ماژولار کردن Settings1- جدا کردن محیط توسعه از محیط پروداکشن۲- راحتی همکاری بین اعضای تیم هر کسی راحت می‌تونه تنظیمات خودش رو بزاره۳- تمیزی کداینم توضیح کاملش برای دوستان علاقه مندیه نکته هم بگم من خودم اوایل این کاررو نمی‌کردم ولی به مرور با مشکلات مختلفی که رو به رو شدم و راه های مختلفی که تست کردم به این رسیدم و هم خودم هم بقیه با این پترن راحت تر بودن خلاصه جایی ثبت نشده که حتما این کار رو کنیدبعضی ها پکیج دیکاپل اینوایرمنت ‌وریبل لینوکس و ... رو استفاده می‌کنن صرفا تجربیه۱- توی گیت ایگنور local.py و keys.pyرو بزارید۲- همونجایی که Settings.pyوجود داره یه پکیج به نام settings ایجاد کنید(دایرکتوری + init )۳- توی دایرکتوری که ایجاد کردید فایل های زیر رو بسازیدbase.pylocal.pykeys.pydev.pyprod.py۴- هرچی توی settings.py دارید بریزید توی base.py و settings.pyرو پاک کنید۵- dev.pyمحیط توسعه مون هست پی هر کانفیگی برای توسعه نیاز داریم میزاریم اینجا برای مثالfrom .base import *
DEBUG = True
try:
    from backend.settings.local import *
except Exception:
    pass
INSTALLED_APPS += [&#039;debug_toolbar&#039;, &#039;django_extensions&#039;]
MIDDLEWARE += [
    &#039;debug_toolbar.middleware.DebugToolbarMiddleware&#039;,
]۶- فایل بعدی prod.pyهست که برای محیط پروداکشنمون هست مثلا می‌تونیم اینجا سنتری و ... رو اضافه کنیمfrom .base import *
DEBUG = False۷- بعدی local.py هست اینجا هرچیزی رو که می‌خوایم رو از base.py اورراید می‌کنیم مثلا اینجا پسورد دیتابیس خودمون رو میزاریم یا تنظیمات هاست رو تغییر می‌دیم مناسب با سیستم خودمون پوش هم نمی‌شه۸- بعدی keys.pyاینجا کلید ها رو می‌زاریم حالا سنتری کاوه نگار زرین پال و...برای فراخوانی همtry:
    from .keys import SENTRY_KEY
except Exception:
    SENTRY_KEY = &amp;quotrandom gen hash&amp;quot۹- فایل initاینجا تعیین می‌کنیم تنظیمات چه محیطی اعمال شهenv_name = &#039;dev&#039;
if env_name == &#039;prod&#039;:
    from .prod import *
elif env_name == &#039;dev&#039;:
    from .dev import *کاربر Farid:من ترجیح میدم برای مورد دوم که فرمودین از پکیج decouple استفاده کنم.مورد دوم:۲- همونجایی که Settings.pyوجود داره یه پکیج به نام settings ایجاد کنید(دایرکتوری + init )کاربر Alireza:خیلی خوبه فقط با keys یخورده موافق نیستم استفاده از .env رو ترجیح میدم (با decouple یا django-environ یا...)اشاره به مورد دوم هست J(در ادامه یکم بحث شده که سانسور کردم)کاربرAmir Motahari:من خودم شخصا:۱. برای settingاز yaml استفاده میکنم، که دوتا نسخه داره، که یکیش قالب کلی + تنظیمات پیشفرض و دومی که در gitignoreهست، تنظیمات لوکال (هم روی سرور هم روی سیستم توسعه دهنده) و درصورت نیاز توسعه دهنده میتونه تنظیمات اختصاصی خودش رو اعمال کنه۲. همیشه برای کوئری گرفتن از values استفاده میکنم که فقط فیلد های موردنظرم رو داشته باشم (۱.باعث بهبود میشه ۲. مشکل n+1پیش نمیاد)۳. این رو هم جایی ننوشته ولی همیشه برای کوئری های گزارش(که اغلب فشار روی دیتابیس میاره، چون باید عملیات به نسبت سنگینی انجام بدن) چک میکنم که یک وقتی ormجنگو کار اضافه ای انجام نده و همیشه دربهترین حالت ممکن اینکار انجام بشه، برای اینکار میتونید از این روش:Queryset.query.__str__()۳. برای کارهای تکراری سعی میکنم از generic viewکاستوم شده خودم استفاده کنم(مثلا cbvبرای datatable با پیاده سازی قابلیت های اون مثل pagging، searchو...)۴. توی روت پروژه برای متد/کلاس های کاربری سراسری یک دایرکتوری به اسم utility یا utilise ایجاد میکنم و این ابزار ها رو به تفکیک کاربردشو براشون فایل جداگانه ایجاد میکنم (مثلا در فایل date.pyتمام متد/کلاس های کابردی مربوط یه تاریخ و زمان رو قرار میدم)۵. ویو ajaxها رو از ویو اصلی جدا میکنم (همینطور برای فرم ها)۶. کامنت کامنت کامنت، همیشه برای کدهاتون کامنت گزاری کنیداگر مورد جدیدی یادم بیاد، به همین اضافه میکنمکاربر edoardo:یکی از چیز هایی که برای من جالب اومد اینکه تونستم دیزاین پترن سینگلتون رو اجرا کنم توی مدلم و خب کسایی که با این پترن اشنایی دارن از مزایاش اگاهن خب اون موقع که من نوشتم نمیدونستم کلی مقاله براش هستولی اگه پروژه ای رو استارت زدین فک کنم خوبه که ازش استفاده کنید و منطق کلیش اینه نمیزاره از کلاستون بیشتر از یک instance ساخته بشه که روی پرفورمنس تاثیر دارهحالا بحثش یکم طولانیه ولی این لینک میتونه دید خوبی بهتون بدهhttps://steelkiwi.com/blog/practical-application-singleton-design-pattern/و اگه حوصله پیاده سازی ندارین تو pypiبگردیناحتمالا براش پکیج نوشتنبحث بعدی که شاید براتون جالب باشه بحث ستینگه که از فایل پایتون به ماژول تغییرش میدین و خب مزایایی که داره میتونینتقسیم بندی کنین بخش های ستینگ رو وحتی براش .envهای مختلفی بسازین که تو دو حالت development و productionاستفاده کنید بشخصه برا من مفید بود وخب منبع براش ندارم واقعیتش ولی two scoop of django درموردش نوشتهو درمورد type hint هایی که تازه اومدن بخونینFastapiداره بشدت ازش استفاده میکنهالبته فک کنم از pydanticاستفاده میکنه و بر اساس اون ساخته شده ولی به شدت جالبه ?و اخرین نکته که شاید به درد دوستان بخوره بحث کوئری زدنه خیلی نوشتم ولی این مقاله بهتون دید خوبی میده در مورد یه سری کوئری ها یی که فکر میکنم بهینه هستن ولی نیستن :)https://link.medium.com/VdGpvVHxDgbکاربر Fazel:یکی از کاربردی ترین مواردی که می تونم بگم، که خیلی هم دنبالش گشته بودم، حتی تو این گروه هم چندین بار‌ پرسیدم اما کسی پاسخگو نبود، استفاده از getattribute و setattr هستبه طوری من نمی تونستم کد هارو reusable بنویسم، اما با استفاده از این دو مورد نزدیک به چهار هزار خط کد رو تبدیل به سیصد خط کردفرض کنید یک مدل دارید که فیلد های rial, btc, eth, bch, usdt,... رو دارهبرای دسترسی به این فیلدها باید بزنیدModel.rialModle.ethاما با این دو ویژگی که گفتم می تونید به شکل زیر هم انجامش دادcrypto = &#039;rial&#039;
Model.__getattribute__(crypto)این مورد خیلی به من کمک کرد و بلد نبودمشتشکر از توجه شما، در صورتی که نکته جدید به پست اضافه شد، اینجا اضافه اش میکنم</description>
                <category>میلاد حاتمی</category>
                <author>میلاد حاتمی</author>
                <pubDate>Sun, 30 May 2021 08:37:47 +0430</pubDate>
            </item>
                    <item>
                <title>پشت صحنه pip install django</title>
                <link>https://virgool.io/@miladhzz/%D9%BE%D8%B4%D8%AA-%D8%B5%D8%AD%D9%86%D9%87-pip-install-django-hpcwcx7yqqxz</link>
                <description>در ادامه ی ویدئوهای رایگانی که با دسته بندی django in depth در سایت جنگولرن و یوتیوب منتشر کردم. این بار یک ویدئوی جدید در مورد دستور pip ضبط کردم. عکس زیر فیلم نیست کلیک نکنید :)آموزش عمیق جنگوتوی این ویدئو یاد میگیریم که پشت صحنه pip install django چه اتفاقی می افته و pip اطلاعات نصب پکیج هارو از کجا به دست میاره.یاد میگیریم که فایل setup.py و setup.cfg چه استفاده ای دارند و همچنین با چندتا از option های فایل setup.cfg آشنا میشیم.لینک ویدئو در جنگولرنلینک ویدئو در یوتیوبامیدوارم ویدئوی مفیدی باشه. خوشحال میشم انتقاد کنید</description>
                <category>میلاد حاتمی</category>
                <author>میلاد حاتمی</author>
                <pubDate>Thu, 29 Apr 2021 17:46:12 +0430</pubDate>
            </item>
                    <item>
                <title>نکاتی که در جنگو یاد گرفتم - بخش پنجم</title>
                <link>https://virgool.io/@miladhzz/%D9%86%DA%A9%D8%A7%D8%AA%DB%8C-%DA%A9%D9%87-%D8%AF%D8%B1-%D8%AC%D9%86%DA%AF%D9%88-%DB%8C%D8%A7%D8%AF-%DA%AF%D8%B1%D9%81%D8%AA%D9%85-%D8%A8%D8%AE%D8%B4-%D9%BE%D9%86%D8%AC%D9%85-ad7evppktfsk</link>
                <description>نکات جنگونکته نوزدهم Django: دکوریتور (decorator) هارو رو میتونیم توی یه لیست بزاریم و یکجا به یک کلاس منتسب کنیم:decorators = [never_cache, login_required]

@method_decorator(decorators, name=&#039;dispatch&#039;)
class ProtectedView(TemplateView):
    template_name = &#039;secret.html&#039;نکته بیستم Django:اگه بخواهیم از دستور print توی کدهای test استفاده کنیم باید دستور اجرای تست هارو با اضافه کردن 2 v- اجرا کنیم (اینجا اسم اپلیکیشن blog هست):python mange.py test blog -v 2وقتی از 2 v- استفاده می کنیم، حتی روند ساخت دیتابیس رو هم می بینیم. همونطوری که می دونید جنگو برای تست یه دیتابیس توی حافظه میسازه.</description>
                <category>میلاد حاتمی</category>
                <author>میلاد حاتمی</author>
                <pubDate>Sun, 28 Mar 2021 10:07:20 +0430</pubDate>
            </item>
                    <item>
                <title>محیط VENV در پایتون چطور فعال می شود</title>
                <link>https://virgool.io/coderlife/%D9%85%D8%AD%DB%8C%D8%B7-venv-%D8%AF%D8%B1-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%DA%86%D8%B7%D9%88%D8%B1-%D9%81%D8%B9%D8%A7%D9%84-%D9%85%DB%8C-%D8%B4%D9%88%D8%AF-xyr0txtduroo</link>
                <description>این مطلب خلاصه ای از ویدئوی آموزشی با همین عنوان در سایت جنگولرن هست. (لینک ویدئو انتهای همین پست)ابتدا در سیستم عامل ویندوز 10، مسیر نصب پایتون را در Environment Variables ویندوز می بینیم. در این آموزش پایتون 3.8 نصب شده است.سپس محیط ایزوله ای که قبلا ساختیم را با دستور activate فعالسازی می کنیم.بعد از فعال کردن محیط های ایزوله، نام محیط مجازی در ابتدای command اضافه می شود. قصد داریم  یاد بگیریم که این حالت چطور فعالسازی می شود.بدین منظور وارد فولدر scripts می شویم و محتویات فایل activate.bat را مشاهده می کنیم.برای اینکه جزئیات را مشاهده کنیم کد خط اول که echo off هست را تغییر می دهیم و با echo on جایگزین می کنیم.سپس مجددا دستور activate را اجرا می کنیم.در این حالت با اجرای دستور activate تمامی دستورات اجرا شده در خروجی نمایش داده می شود.با توضیح دادن محتویات فایل activate.bat متوجه می شویم که وقتی دستور activateاجرا می شود، venv مسیر نصب پایتون را در یک متغیر با عنوان old نگهداری می کند.سپس هنگام اجرای activate، آدرس python.exe ایی را که در venv هست در ابتدای متغیر old قرار می دهد و به عنوان path جدید معرفی می کند.در این صورت وقتی دستورات پایتون را اجرا می کنیم، از پایتون درون venv استفاده می شود و هر پکیجی که نصب کنیم در این venv نیز نصب می شود.در ادامه با فهمیدن این مطلب، اقدام به نصب پایتون 3.9 می کنیم.و بعد از نصب پایتون جدید، با جابجا کردن اولویت مسیر در Environment Variables ویندوز، برای نسخه های مختلف پایتون، متوجه می شویم که با تغییر اولویت، سیستم عامل نسخه خاص پایتون را شناسایی می کند.در انتها مراحل فوق را برای سیستم عامل Linux ، Ubuntu انجام می دهیم و متوجه می شویم همین رفتاری که توضیح دادیم برای لینوکس و ابونتو ها صدق می کند.امیدوارم این مطلب برای شما مفید بوده باشه. این آموزش مقدماتی برای شروع بررسی عمیق جنگو هست.لینک ویدئوی آموزشی مربوط به این مطلب:https://www.youtube.com/watch?v=4hgFtNsMqyw&amp;amp;tvenv چطوری فعال میشهلطفا با نظرات خودتون به من در بالا بردن کیفیت آموزش ها کمک کنید. متشکرم</description>
                <category>میلاد حاتمی</category>
                <author>میلاد حاتمی</author>
                <pubDate>Wed, 03 Mar 2021 14:33:32 +0330</pubDate>
            </item>
                    <item>
                <title>نکاتی که در جنگو یاد گرفتم  - بخش چهارم</title>
                <link>https://virgool.io/@miladhzz/%D9%86%DA%A9%D8%A7%D8%AA%DB%8C-%DA%A9%D9%87-%D8%AF%D8%B1-%D8%AC%D9%86%DA%AF%D9%88-%DB%8C%D8%A7%D8%AF-%DA%AF%D8%B1%D9%81%D8%AA%D9%85-%D8%A8%D8%AE%D8%B4-%DA%86%D9%87%D8%A7%D8%B1%D9%85-zqiv1enrebn9</link>
                <description>نکات جنگونکته شانزدهم Django:در جنگو می توانیم موتور  template پیشفرض را تغییر دهیم. کار  template engine این است که المان های وب را در صفحه بارگزاری و ایجاد کند. جنگو به صورت پیشفرض از DjangoTemplate استفاده می کند، جنگو در لینک زیر توضیحاتی در مورد روش تغییر این engine داده است. https://docs.djangoproject.com/en/3.0/ref/settings/#std:setting-TEMPLATESبدون هیچ کار اضافی و نصب پکیج جدیدی، می توانیم از Jinja2 هم استفاده کنیم.نکته هفدهم Django:تفاوت classmethod در پایتون و classonlymethod در جنگو در این است که classmethod  را می توانیم در یک instance صدا بزنیم، اما classonlymethod که توسط جنگو نوشته شده را فقط در class می شود صدا زد و اگر بخواهیم در نمونه کلاس صدا بزنیم استثنای AttributeError می دهد. یکی از استفاده های این متد در as_view است که در CBVs کاربرد دارد. سورس کد این متد را در لینک زیر ببینید:https://github.com/django/django/blob/9c92924cd5d164701e2514e1c2d6574126bd7cc2/django/utils/decorators.py#L6نکته هجدهم Django: در CBVs جنگو باید هنگام استفاده از success_url باید از reverse_Lazy استفاده کنیم، چون attribute ها در کلاس های پایتون هنگام declaration که معادل فارسی این کلمه رو بلد نیستم:)  evaluated می شوند. برای درک بهتر این موضوع لینک زیر رو ببینید:https://chase-seibert.github.io/blog/2012/01/20/python-class-attributes-are-evaluated-on-declaration.html</description>
                <category>میلاد حاتمی</category>
                <author>میلاد حاتمی</author>
                <pubDate>Tue, 17 Nov 2020 10:15:47 +0330</pubDate>
            </item>
                    <item>
                <title>تجربه مصاحبه برنامه نویس جنگو شرکت مهسان - اسکایپی</title>
                <link>https://virgool.io/@miladhzz/%D8%AA%D8%AC%D8%B1%D8%A8%D9%87-%D9%85%D8%B5%D8%A7%D8%AD%D8%A8%D9%87-%D8%B4%D8%B1%DA%A9%D8%AA-%D9%85%D9%87%D8%B3%D8%A7%D9%86-%D8%A7%D8%B3%DA%A9%D8%A7%DB%8C%D9%BE%DB%8C-djnyhd43dwcu</link>
                <description>شرکت مهسانقبل از اینکه در مورد مصاحبه توضیح بدم، باید این نکته رو بگم که دو تا مهسان داریم. یکی mahson با آدرس http://mahsan.co/  و یکی دیگه mahsun  با آدرس https://mahsun.com/ که من میخوام در مورد اولی mahson صحبت کنم.من از طریق linkedin با مهسان آشنا شدم، یعنی یکی از کارمندان بخش منابع انسانی (به قول خودشون توسعه انسانی) بهم پیام داد که رزومه شمارو دیدیم و ... جلسه اسکایپی با نیم ساعت تاخیر شروع شد. قرار بود ساعت 16 باشه که 16:03 دقیقه تماس گرفتن که ببخشید، امکان داره نیم ساعت دیگه جلسه بگذاریم، که من گفتم اوکی و از اینکه اطلاع دادن خوشحال شدم.اول یه بخش از سوالات رو منابع انسانی پرسیدن، مهم ترینش این بود که آیا  قصد ادامه تحصیل و قصد مهاجرت دارم؟ و چقدر حقوق میخواهید و الان چقدر میگیرید. اخرش یه سوال پرسید که اگه میتونستی چندتا قدرت فرازمینی داشته باشی، مثل نامرئی شدن و ... چیو دوست داشتی. که گفتم دوست داشتم مثل خدا باشم و همه چیو از بالا ببینم :) یا نامرئی بشم و برم سوالات امتحانی رو نگاه کنم :)دوم یک نفر سوالات فنی آکادمیک پرسید. 3 تا سوال در مورد الگوریتم و پیچیدگی زمانی الگوریتم ها پرسید. یکی از سوالات این بود که یه متن داریم و میخواهیم پرانترزهارو بررسی کنیم که آیا پرانتزها درست باز و بسته شده اند، پیچیدگی زمانی این چی میشه؟ بعدی اینکه یک کلمه مثل گرگ از هر طرف گرگ میشه (پالیندورم)، به چه روشی این کلمات رو تشخیص بدیم و پیچیدگی زمانی اش چقدره؟ بعدی یک لیست پیوندی داریم، چطور عنصر وسط رو پیدا کنیم و پیچیدگی زمانی چی میشه؟ چندتا سوال هم در مورد لینوکس و دستوراتش پرسیدن. و چندتا سوال هم در مورد شبکه و تفاوت پروتکل tcp و udp پرسیدن.سوم یک نفر دیگه سوالات جنگو رو پرسید، از موارد زیر پرسید:django migrations, authentication backend, python generator , python operator overloading, django bulk create, dockerfile, DRF, JWT, django custom validator, python str  method, python repr, python multi threading خلاصه سوالات رگباری بود.من عقیده دارم که این روش مصاحبه دیگه به درد نمیخوره، نباید فقط اینجوری سوال پرسید، چون ممکنه طرف هزار تا مصاحبه رفته باشه و دیگه همه سوالات رو بدونه، اما در عمل تعطیل باشه. من توی دات نت اینقدر مصاحبه رفته بودم که دیگه سوالها برام شوخی بودن. در کل تجربه ی خوبی بود، اما من قبول نشدم :)</description>
                <category>میلاد حاتمی</category>
                <author>میلاد حاتمی</author>
                <pubDate>Mon, 16 Nov 2020 15:22:31 +0330</pubDate>
            </item>
                    <item>
                <title>چرا در CBVs جنگو باید از reverse_Lazy استفاده کنیم؟</title>
                <link>https://virgool.io/@miladhzz/%DA%86%D8%B1%D8%A7-%D8%AF%D8%B1-cbvs-%D8%AC%D9%86%DA%AF%D9%88-%D8%A8%D8%A7%DB%8C%D8%AF-%D8%A7%D8%B2-reverselazy-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%DA%A9%D9%86%DB%8C%D9%85-no5or8b2narz</link>
                <description>این کد رو ببینید (مثال خود جنگو):from django.urls import reverse_lazy
from django.views.generic.edit import DeleteView
from myapp.models import Author

class AuthorDelete(DeleteView):
    model = Author
    success_url = reverse_lazy(&#039;author-list&#039;)توی کد بالا success_url در واقع آدرسی رو میگیره که بعد از حذف رکورد، سایت به اونجا redirect میشه.سوال اینجاست که چرا باید از reverse_lazy استفاده کنیم؟ چرا از reverse استفاده نمی کنیم؟حالا این کد رو ببینید (یکم تغییر دادم به کد بالا):from django.urls import reverse_lazy
from django.views.generic.edit import DeleteView
from myapp.models import Author


class AuthorDelete(DeleteView):
    model = Author
    
    def get_success_url(self, **kwargs):
        return reverse(&#039;author-list&#039;)کد success_url رو حذف کردم و به جاش از get_success_url استفاده کردم، این کد همون کار کد قبلی رو میکنه، چون DeleteView از BaseDeleteView ارث بری میکنه و اونم از DeletionMixin ارث بری کرده و get_success_url متدی از کلاس DeletionMixin هست.اما نکته اینجاست که توی کد دوم از reverse استفاده کردم و نیاز نیست که از reverse_lazy استفاده کنیم. اگر توی کد اول از reverse استفاده کنیم وقتی میخواییم سرور رو ران کنیم با استثناء ImproperlyConfigurd مواجه میشیم.توی مستندات جنگو یه جمله گفته:We have to use reverse_lazy() instead of reverse(), as the urls are not loaded when the file is imported.اما در واقع دلیل استفاده از lazy اینه که:Python class attributes are evaluated on declaration.شمارو با لینک زیر تنها میگذارم، برای من اینقدر جالب بود که این مطلب رو نوشتم:https://chase-seibert.github.io/blog/2012/01/20/python-class-attributes-are-evaluated-on-declaration.htmlDjango reverse_lazy</description>
                <category>میلاد حاتمی</category>
                <author>میلاد حاتمی</author>
                <pubDate>Sun, 16 Aug 2020 00:33:22 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش ورود و ثبت نام با موبایل در جنگو</title>
                <link>https://virgool.io/@miladhzz/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%88%D8%B1%D9%88%D8%AF-%D9%88-%D8%AB%D8%A8%D8%AA-%D9%86%D8%A7%D9%85-%D8%A8%D8%A7-%D9%85%D9%88%D8%A8%D8%A7%DB%8C%D9%84-%D8%AF%D8%B1-%D8%AC%D9%86%DA%AF%D9%88-qwmdc88umle4</link>
                <description>ورود و ثبت نام با موبایل در جنگواعتبارسنجی با تلفن همراه و کد یکبار مصرف در اکثر سایت ها متداول شده و سایت های زیادی از این روش برای اعتبارسنجی کاربران خود استفاده می کنند. با استفاده از فریمورک جنگو و قابلیت های زیادی که این فریمورک محبوب دارد، پیاده سازی این قابلیت به آسانی امکان پذیر است.در این دوره ی آموزشی با سفارشی کردن کلاس User و ساخت یک Manager اختصاصی شروع به پیاده سازی ثبت نام و لاگین با شماره تلفن کردیم و تفاوت کلاس های AbstarctUser و AbstractBaseUser را یاد میگیریم. با کلاس ModelBackend در جنگو و متد Authentication آشنا می شویم و با این متد کاربر بدون رمز قادر به لاگین در سایت خواهد بود.در ادامه ی اموزش با اتصال به یک سرویس جانبی، پیامک یک بار مصرف را با زمان انقضای مشخص به کاربر ارسال می کنیم و با استفاده از Django messages framework پیام های مناسبی به کاربر نمایش می دهیم.در انتهای آموزش با signal و متدهای Async آشنا خواهیم شد و برای ارسال غیرهمزمان پیامک از پکیج django-background-tasks استفاده خواهیم کرد.دمو آموزش ورود با موبایل و کد OTP را در ویدئوی زیر ببینید: https://www.aparat.com/v/TIntk/ در این آموزش از پایتون نسخه ۳٫۸٫۰ و جنگو ۳٫۰٫۳ و پکیج django-background-tasks استفاده شده است.مباحثی که در این دوره به آن ها میپردازیم : آشنایی با کلاس های AbstarctUser و AbstractBaseUserساخت کلاس Manager اختصاصیایجاد authentication backend اختصاصی با ارث بری از ModelBackendثبت نام و لاگین با استفاده از شماره موبایلایجاد و اعتبارسنجی کد یکبار مصرف (OTP)استفاده از RestFull سرویس و وب سرویس های SOAP XML برای ارسال پیامکآشنایی با Django messages frameworkآشنایی با Signals در جنگوآشنایی با ابزارهای ارسال درخواست ها به صورت غیرهمزمان (async)استفاده از django-background-tasksاز این لینک دوره را خریداری کنید.</description>
                <category>میلاد حاتمی</category>
                <author>میلاد حاتمی</author>
                <pubDate>Sat, 08 Aug 2020 11:39:12 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش کار با فرم ها در Django در قالب رزومه ساز آنلاین</title>
                <link>https://virgool.io/applymag/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%D9%81%D8%B1%D9%85-%D9%87%D8%A7-%D8%AF%D8%B1-django-%D8%AF%D8%B1-%D9%82%D8%A7%D9%84%D8%A8-%D8%B1%D8%B2%D9%88%D9%85%D9%87-%D8%B3%D8%A7%D8%B2-%D8%A2%D9%86%D9%84%D8%A7%DB%8C%D9%86-ababbzbh919d</link>
                <description>بعد از انتشار دوره های آموزش مقدماتی و متوسط جنگو به صورت پروژه محور در سایت دانشجویار و بازخوردهایی که از کاربران دانشجویار داشتم.و همچنین سوالات متعددی که در مورد فرم های جنگو، در گروه های تلگرامی پرسیده می شد، تصمیم گرفتم یک دوره ی آموزش استفاده از فرم ها در Django به صورت پروژه محور برای سایت دانشجویار بسازم.  https://www.aparat.com/v/ruiRo در این دوره ی آموزشی یک سیستم رزومه ساز آنلاین را پیاده سازی خواهیم کرد، برخی از عناوین این دوره آموزشی:نمایش فرم در ویو و آشنایی با توکن CSRFتفاوت as_p و as_ul و as_table هنگام رندر فرمنمایش فرم به صورت دستی و غیرخودکارشخصی سازی فیلدها با widget های فرمآشنایی با متد is_valid و دیکشنری cleaned_dataاستفاده از novalidate در فرم جهت نمایش خطاهای سمت سرورسفارشی کردن اعتبارسنجی و آشنایی با Exception Validatiبازنویسی متد clean و ساخت یک متد Validatorنمایش پیغام خطاهای مناسب با توجه به نوع خطاهاساخت فرم با ارث بری از  ModelFormاستفاده از widget های پیشرفته در فرمآپلود فایل در فرم هاساخت فرم ثبت نام با  UserCreationFormویرایش پروفایل کاربر با UserChangeFormآشنایی با Formsetویوهای Class-based و فرم هاپیاده سازی یک فرم جستجو با فیلتر چندگانهآموزش فارسی جنگولینک دوره آموزشی در سایت دانشجویار:https://www.daneshjooyar.com/%d8%a7%db%8c%d8%ac%d8%a7%d8%af-%d9%81%d8%b1%d9%85-%d8%af%d8%b1-%d8%ac%d9%86%da%af%d9%88/خوشحال میشم، نظرات ارزشمندتان را ببینم. میلاد حاتمی  (برنامه نویس از سال 2008)</description>
                <category>میلاد حاتمی</category>
                <author>میلاد حاتمی</author>
                <pubDate>Thu, 16 Apr 2020 17:34:37 +0430</pubDate>
            </item>
                    <item>
                <title>مصاحبه، اعتماد، استخدام، سفته و دوباره مصاحبه</title>
                <link>https://virgool.io/@miladhzz/%D9%85%D8%B5%D8%A7%D8%AD%D8%A8%D9%87-%D8%A7%D8%B9%D8%AA%D9%85%D8%A7%D8%AF-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%B3%D9%81%D8%AA%D9%87-%D9%88-%D8%AF%D9%88%D8%A8%D8%A7%D8%B1%D9%87-%D9%85%D8%B5%D8%A7%D8%AD%D8%A8%D9%87-wlzmrgqjxqu2</link>
                <description>من در سال 96 و 97 مصاحبه های شغلی زیادی رفتم توی نود درصد این مصاحبه ها یه جمله ی مشترکی رو مصاحبه کننده (گان) بهم میگفتن: &quot;تا حالا همچین موردی برای ما پیش نیامده، اساس کار ما بر اعتماد دو طرفه است&quot;  :|  خواسته من همیشه این بود: &quot;اگه امکان داره من توی سفته هایی که بابت ضمانت میدم، بنویسم جهت حسن انجام کار، چون بابت سفته های سفید امضایی که قبلا دادم، هنوز درگیرم و حتی سفته های وامی که تسویه کردم رو گذاشتن اجرا&quot;  تعریف اعتماد دو طرفه رو من هنوز متوجه نشدم، آیا یعنی من اعتماد کنم و سفید امضا بدم، اما اونا اعتماد نکنن و سفید امضا بگیرن. البته حدودا 95 درصد شرکت هایی هم که من برای مصاحبه رفتم حقوقی که به اداره کار اعلام میکردن، پایه اداره کار بود.خیلی از دوستان میگن، ملاک حقوق بازنشستگی 5 سال آخره و شرکت میتونه 5 سال آخر بیمه کامل واریز کنه. از این دوستان باید پرسید؛ از کجا معلوم که همین امسال از کار افتاده نشیم؟  خوشحال میشم، چند مورد از تجربه های خودتونو توی نظرات بنویسید، البته بدون درج نام شرکت که یه وقت شر نشه.اعتماد بیجا نکن عزیز من</description>
                <category>میلاد حاتمی</category>
                <author>میلاد حاتمی</author>
                <pubDate>Sun, 12 Apr 2020 14:09:53 +0430</pubDate>
            </item>
            </channel>
</rss>