آموزش جامع و کاربردی Django, Django REST Framework

  • قیمت۵٬۵۰۰٬۰۰۰ تومان
    ۳٬۹۵۰٬۰۰۰ تومان با تخفیف ویژه

  • مدرسali rahmani
  • زمان۱۴ ساعت

به اشتراک‌گذاری

django basic

  • یک مقدمه کلی از مطالبی که قراره گفته بشه رو صحبت میکنیم و با جنگو و خالق جنگو و علت نام این فریمورک زیبا آشنا میشیم.

  • اولین قدم در یادگیری یک مطلب یا ابزار جدید اینکه بتونیم در موردش مطلب پیدا کنیم و مطالعه داشته باشیم. دومین قدم هم اینکه ساده عملیات ممکن رو بتونیم باهاش انجام بدیم. در این قسمت یاد میگیرم داکیومنت خود جنگو چیه و چجوری ازش استفاده میگنیم بعد هم اولین پروژه رو باهاش میسازیم.

  • راه های مختلفی برای اجرای یک برنامه وجود دارد ولی هموواره توصیه میشود که در حالتی ایزوله برنامه ها و نرم افزار هارا استفاده کنید. حالا که قرار است ما همین برنامه ها را از اول بنویسیم پس باید یک فضای مخصوص ایجاد کنیم و کاری کنیم که سیستم و دیگر نرم افزار ها در کار یکدیگر کمترین اختلال رو بوجود بیارن. در این قسمت یکی از همین راه های ایزوله کردن رو باهم کمی صحبت کردیم. البته کلی راه دیگه وجود داره ولی در مرحله دولوپ ما از virtualenv استفاده میکنیم.

  • در این قسمت با قلب جنگو یعنی فایل settings اشنا میشم ولی نه جدیدترین نسخه بلکه یکی از نسخه های قدیمیش و در قسمت بعدی در مورد تغیرات و نکته های ریز این فایل بیشتر صحبت میکنیم.

  • دوتا نسخه جدید و قدیم رو در کنار هم دیگه نگاه میکنیم که ببینیم چه چیزهایی تغییر کرده و بیشتر به جزییات فایل settings و manage میپردازیم.

  • سایت ها و منابع مختلفی که میشه ازش اطلاعات به کارآمد گرفت رو باهم بررسی میکنیم و میبینیم که بهتره چجوری در گوگل سرچ کنیم تا به جواب های مد نظرمون برسیم.

  • در این قسمت ساختار ها و شیوه نام گذاری فایل ها روش ایجاد فایل های جدید رو باهم صحبت میکنیم و چند نکته برای اولین مصاحبه هایی که میرید بهتون میگیم.

  • برای اولین بار جنگو را Run میکنیم و کمی با تنظیمات settings کار میکنیم و اثرشون رو باهم میبینیم.

  • یکی از زیباترین و پایه ای ترین قسمت های جنگو که خیلی به دولوپر ها کمک میکنه را باهم بررسی مکینم. بهتون میگیم که امنترین سیستم دنیا چه سیستمی هستش. درسته که میدلور ها بخشی از مشکلات ما را حل کرده اند ولی دلیل خوبی نیست که ساده از کنارشون بگذریم و ندونیم دور از چشم ما چه اتفاقی در حال رخ دادن هستش

  • همه ما میدونیم جنگو یک فریم ورک برای وب هستش ولی در دنیای وب اطلاعات چگونه جابجا میشه درخواست ها به چه صورت منقل میشه؟ در این قسمت به این میپردازیم که یک request چیست و در ادامه با دنیای وب بیشتر ورود میکنیم.

  • تمام سیستم ها در دنیا دارای ساختار و معماری هستند و جنگو هم از این موضوع استثنا نیست. در این قسمت به معماری جنگو میپردازیم و تعداد از سوالاتی که در تمام مصاحبه ها پرسیده میشود رو جواب میدیم.

  • یکی از کلماتی که از اول دوره تا الان بارها شنیدید کلمه model هستش در این قسمت اولین و ساده ترین مدل را میسازیم و باهاش آشنا میشیم. و میبینیم که داده ها چجوری در دیتابیس ذخیره میشوند.

  • انسان همواره عادت دارد داده ها را دسته بندی کند. بنابراین در مدل های جنگو هم همین رفتار را تکرار میکنیم و با نحوه ذخیره انواع مختلف داده در دیتابیس آشنا میشیم. مثلا انتظار داریم در جایی نام را با حرف پر کنیم نه با True و False بنابراین باید به دیتابیس بگویم که این بخش از تو قرار است داده هایی را با نام به صورت حروف نگه داری کند.

  • همیشه انتظار داریم در یخچال قسمت میوه ها از گوشت و از مایعات جدا باشد. ما این کار را با بسته بندی انجام میدهیم. حالا فرض کنید یخچالی داریم که یک سبد بزرگ از میوه و گوشت و شیر و ماست رو باهم قاطی کردیم در این حالت با تعجب نگاه میکنیم که چجوری از اینجا قرار چیزی پیدا کنم. این در حالی هستش که در واقع میتونیم همه رو از هم جدا کنیم ولی مطمینا بهترین حالت نیست! پس انتظار داریم راهی وجود داشته باشد که همه چیز معقول و نرمال و به شکلی که باید جلوه کند. در پایگاه داده یا همان دیتابیس هم این موضوع صادق هستش. مثلا شما میتویند در یک CharField همچین جمله ‍< ماشین مشدی ممدلی نه بوق دارد نه صندلی > ولی بنظر شما آیا این نوع از ذخیره داده منطقیه آیا نمیتوانیم بهتر داده ها را ذخیره کنیم. در این جمله که مربوط به یک ماشین است نام صاحب و وضعیت صندلی و بوق آن مشخص شده ولی برای هربار استخراج داده ها باید روی متن پردازشی بی دلیل انجام بدهیم. در صورتی که میتونیم به این صورت ذخیره سازی انجام دهیم. Class Car(models.Model) owner= مشدی ممدلی chair= False horn= False حالا در یک نگاه خیلی سریعتر نسبت به حالت قبلی میتوانیم اطلاعات این ماشین را بفهمیم. به این کار میگوییم نرمال سازی دیتا در دیتابیس.

  • به عنوان یک بکند دولوپر مهمترین کاری که انجام میدهیم ذخیره سازی و نگهداری دیتاها درون دیتابیس است. حالا تصور کنید اطلاعات ممکن است باهم یک رابطه معنا داری داشته باشند. برای نحوه ذخیره سازی این نوع داده ها روشی وجود دارد که به آن باهم آن را میبینیم چیست و چگونه کار میکند.

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

  • من خودم وقتی اون اوایل داشتم این موضوعات رو یاد میگرفتم خیلی رفتار نوسانی پیدا کرده بودم بعضی وقتها خوشحال بودم که ایول چه چیزی یاد گرفتم بعد یکم میگذشت و اگر به باگی چیزی میخوردم که بلد نبودم حلش کنم افسردگی حمله میکرد بهم که تو نمیتونی و فکر میکردم فقط منم که نمیفهمم بعضی از موضوعات رو و انرژیم رو میگرفت. تا اینکه یکی از دوستانم بهم چیزهایی که توی این قسمت گفتیم رو گفت برو در این مورد سرچ کن. خلاصه اش اینکه بعد از اون سرچ خیلی حالم بهتر شد و بعدا فهمدم همه این حال رو داشتن. از اون به بعد هر وفت اونطوری میشم خودم رو توی نموداری که در موردش حرف میزنیم پیدا میکنم و بخودم میگم ادامه بده.

  • بهترین راه برای فهمیدن یک ساختار ترسیم اون ساختار هستش. مثل یک معمار وقتی میخواد به بقیه بگه ساختمان مد نظر قراره چه شکلی باشه اون رو میکشه. در این قسمت روش این ترسیم رو میگیم. هرچند به موضوعات دیگری هم پرداختیم ولی هر کدام رو در قسمت های بعدی بیشتر آشنا میشیم.

  • مدل های مختلفی برای ساختن یک ابجکت وجود دارد. روشی مد نظر ما در این قسمت روش OOP خواهد بود. با جزییات آن آشنا میشیم. این مبحث از اون دست مباحث کلیدی و مهمی هستش که همیشه تا آخر ازش استفاده خواهید کرد و بعد از مدتی برای شما جزو بدیهیات میشه. ولی همیشه توی سوالات مصاحبه پرسیده میشن و به نسبت برای مصاحبه گر نوع پاسخ شما به این سوال اهمیت زیادی دارد. پس هر کاری که به ذهنتون میرسه انجام بدید تا این کانسپت رو بهتر درک کنید. من هم تلاشم رو میکنم که در طول دوره تکرار کنم و علت ها رو بکم که براتون جا بیفته.

  • هر سیستمی با تمام پیچیدگی هاش وقتی کارآمد خواهد بود که بتوان باهاش ارتباط برقرار کرد. در جنگو ما با View ها در تلاشیم که این ارتباط رو با بقیه دنیا برقرار کنیم. برای نوشتن view راه های بسیار زیادی وجود دارد که تعداد از آن ها را در طول دوره باهاش آشنا میشیم. اما چیزی که در این قسمت میبنیم فقط یکی از آن هاست.

  • تعداد view هامون رو اضافه میکنیم و سعی میکنیم کد بهتری بنویسم تا به Best Practice نزدیکتر بشیم. در این مدت ارور ها رو میبینیم و متوجه میشیم که چرا اون بهترین حالت اون چیزی که قبلا نوشتیم نیست.

  • وقتی اندپوینتی ارایه میکنیم ممکن است وقتی چیزی اشتباه وارد شده باشد ویا خطایی رخ دهد. از ما انتظار دارند تا در این حالت پیامی متناسب با وضعیت پیش آمده منتقل کنیم. در این قسمت قدرت < نه > گفتن به استفاده کننده اندپوینت هامون رو یاد میگیریم.

  • این سری دایو عمیق تری به درون سریالایزر میزنیم و باهم قابلیت های دیگه و ارورهای احتمالی رو بررسی میکنیم.

  • مصاحبه … برای انتخاب شدن در هر کاری باید مراحل مصاحبه رو طی کنیم. مصاحبه جلسه ای هستش که شما برای اولین بار در اون شرکت ارزیابی میشید. چون آدم های اون شرکت شما رو نمیشناسند احتمالا. یکی از اساسی ترین راه ها برای پیدا کردن کار دیدن موقعیت های شغلی در سایت های مختلف هستش. توی این قسمت باهم چندین موقعیت شغلی رو بررسی میکنیم و میبینیم که چه اطلاعاتی از اون متن یک صفحه ای درمیاد و چطوری میتونیم خودمون رو با نیازهای اون ها تطبیق بدیم.

  • گاهی دیتا ها با یکدیگر رابطه دارند و قبلا دیدم در دیتابیس فقط Id آن ذحیره میشود. احتمالا تا الان در پاسخهایی که از سریالایزر ها گرفتیم دیدید فقط عدد آن فیلد برگردانده میشود نه تمامی مقدار ها. در این قسمت باهم بررسی میکنیم که چجوری همه اطلاعات رو برگردانیم. اصطلاحا Nested کنیم.

  • برای اولین بار با html template های جنگو آشنا میشیم و ساده ترین پیاده سازی آن را با هم میبینیم.

  • گاهی لازم است داخل یک صفحه html یک سری داده که مطابق با فیلد های یکی از مدل هایمان هست را بفرستیم و یا حتی دریافت کنید. برای اینکار از form میتوانیم کمک بگیریم. در واقع فرم ها چهارچوبی برای نمایش ویا دریافت اطلاعات هستند.

  • هر کاری قواعد خودش را دارد. در برنامه نویسی هم قواعد مهم وجود دارد که اجباری نیستند. هیچ کجا هم ارور نمیخورید ولی باعث میشود هزینه ها کاهش یابد. انتهای این قسمت متوجه میشید که چه نکاتی را باید رعایت کنیم و چرا در مصاحبه ها ممکن است پرسیده شود

  • تا قبل از این ما تمامی view ها را به روش Functional پیاده سازی کردیم و دیدم چه استفاده ای دارد. حالا از قواعد OOP استفاده میکنیم تا view های بهتری بنویسیم.

  • دایو عمیق تری به درون class base view میزینیم و میبینیم که از فرم ها چطوری در این جا میتونیم بهرمند بشیم.

  • باز هم بیشتر class base view رو بررسی میکنیم. میبینیم چطوری میشه از داخل یک رکویست GET یک quey_param کشید بیرون و ازش استفاده کرد.

  • حالا که چندین API نوشتیم بیاید کمی بیشتر با مفهوم آن آشنا بشیم. در اینجا مشابه های API (یا همان endpoint) در دیگر سیستم هارا کمی جست و جو میکنیم و نیاز وجودشان را میفهمیم. همچنین از کتابخانه ای که قبلا فقط کورکورانه ازش استفاده کردیم بیشتر آشنا میشویم و نصبش میکنیم وبا سایت و داکیومنتش همونطور که با جنگو آشنا شدیم آشنا میشیم

  • دوباره میریم سراغ ساختار فایل های جنگو و بعد از آن با ساختار DRF اشنا میشویم. یک سوال مهم میپرسم که همه جا همراه شما خواهد بود: یک app را با چه علت هایی میتوانیم به دو app تقسیم کنیم.

  • در این قسمت با Request و Response در DRF آشنا میشیم و باهم بررسیشون میکنیم.

  • همانطور که قبلا گفتیم راه های مختلفی برای ایجاد یک api وجود داره. پس باز هم دنبال راه های جدید درون DRF میگردیم.

  • همیشه یک راه آسان تر برای انجام کارهای روتین و معمولی وجود دارد. تا به الان هرچقدر که جلو آمدیم و با روش های مختلف api نویسی آشنا شدیم دیدم که هر مرحله از مرحله قبلی راحتتر هستش پس باز هم احتمالا بتونیم راه های راحت تری پیدا کینم.

  • این قسمت توضیحی ندارد. خودتون ببینید.

  • در ViewSet که اندپوینت هایی آماده به ما ارایه میکند، راه هایی برای ایحاد api ها بیشتر وجود دارد. پس بریم تو کارش.

  • هر سیستمی برای استفاده یک تعداد کاربر ایجاد شده. همونطور که قبلا دیدم جنگو درون خودش برای User زیرساخت مخصوصی داره. در این قسمت با User جنگو آشنا میشیم.

  • در این قسمت دوباره برمیگردیم به بحث جذاب مصاحبه و چیزهایی که تا الان باهم پیش بردیم رو درون روزمه ها و فرصت های شغلی و سوال های احتمالی هر مصاحبه ای جستوجو میکنیم.

  • فایلی که به آن کمتر پرداختیم یعنی app.py را باهم بررسی میکنیم و سعی میکنیم یک application به user خودمان احتصاص بدهیم.

  • پس از اینکه application مخصوص خودمان را برای کاربرها ساختیم از زیرساخت جنگو استفاده میکنیم تا چیزی که مدنظر خودمان هست را پیاده سازی کنیم.

  • خب حالا که جست و گریخته با قسمت های مختلف جنگو آشنا شدیم. وقتش شده یک پروژه کوچک شروع کنیم تا هم مروری بر مطالب قدیمی باشد وهم نیاز و کاربرد مطلب جدید رو در یک پروژه با تغریقی درستتر ببینیم.

  • در این قسمت مدل ها را ایجاد میکینم و میگیم که هر مدل چه نیازی را برطرف میکند.

  • در این قسمت میخواهیم به مدل Category بپردازیم تا ViewSet و Serializer آن را با علت های مشخص و نکات بسیار مهم که براساس نیاز اعلام شده است طراحی کنیم.

  • یک API ساده را قرار است باهم پیاده سازی کنیم و باهم نکات بسیار مهمی بررسی کنیم. تعداد از این سوال ها برای زمانی است که در وضعیت API Design هستیم.

  • یکی از ممهمترین قسمت ها در هر پروژه ای دیتابیس اون پروژه است. توی این قسمت یادگرفتیم که کویری هامون چطوری کار میکنن و اینکه چرا زمان پردازش یک عمل یکسان در دفعات مختلف متفاوته.

  • چرا باید تست بنویسیم؟ تست نویسی به چه دردی میخوره؟ آیا تست به بهتر شدن ما کمک میکنه؟ در این قسمت در مورد تست نویسی و تست هایی که برای اپلیکیشنمون میتونیم بنویسیم آشنا شدیم. یکی از سوال های مصاحبه ها که میپرسن چرا تست … و چگونه تست …. رو هم توش جواب دادیم. و یسری اسم های جدید شنیدیم که بعدا توی مطالعات شخصیمون سراغش بریم.

  • توی این قسمت نکات ریزی درمورد ViewSet ها گفتیم چندتا چیز را override کردیم و یک اندپوینت رو به چندروش پیاده کردیم و تفاوت روش هارو گفتیم.

  • نکات بسیار مهم و کلیدی در مورد ساخت اندپوینت Create گفتیم و جاهایی که باید حواسمون باشه که اطلاعات خراب نشه رو بررسی کردیم. همینطور ارور های مختلف مهمی رو باهم میبینیم و درمورد چرایی وجودشون صحبت میکینم. (میدونم زمانش طولانیه ولی اگر قول بدید که این قسمت رو دوبار پشت هم میبنید میتونید سرعت ویدیو رو بذارید رو 1.5X 😀 )

  • در مورد بهتر و اصولی تر نوشتن اندپوینت های گذشته صحبت کردیم و یکم با سریالایزر بیشتر کار کردیم. یک اندپوینت جدید پیاده کردیم و کنارش دیدم که کجا ها چه سوال هایی رو باید بپرسیم که ممکنه طراحی و پیاده سازیمون بدون مشکل باشه.

  • توی این قسمت در مورد manager ها و class.objects صحبت کردیم. گفتیم که چه کار هایی باهاش میشه انجام داد و چندتا باگ و علتشون رو بررسی کردیم.

  • در دنیای واقعی که آدم ها زندگی میکنند بدون اطلاع از دنیای کامپیوتر و هر چیز دیگری همیشه در تلاش بودند که راهی مناسب برای احراز هویت و اعتماد کردن پیدا کنند. تمام روش هایی که ایجاد شده از قفل های قدیمی تا در های اهرام مصر و ورودی های هواپیما و ورودی های دنیای اعداد صفر و یک همگی چندین گام و مرحله متفاوت داشتند. یعنی همانطور که برای رسیدن به اتاقی خاص در اهرام مصرف باید از درها با روش های مختلف گذر کرد در اینجا هم همینطور است. در این قسمت تکنیک های مختلف و علت و روش تعداد از آن ها را توضیح دادیم. و مهمترین نکته این قسمت ایجاد حس نیاز و پرداختن به اهمیت این موضوع بوده.

  • ما همیشه نمیتونیم تمام کارهامون رو خودمون بکنیم. چون نمیتونیم از خودمون چندین کلون داشته باشیم ولی میتونیم برای براورد کردن نیاز هامون کارهامون رو بین آدم های مختلف تقسیم کنیم و بهای اون کار رو بپردازیم. در این قسمت هم همچین نیازی را درموردش صحبت کردیم و ابزارهایی که باهاش اینکار رو میکنیم معرفی کردیم.

  • برای رشد همیشه باید برنامه ای داشت. و همیشه در حال یادگیری بود. توی این قسمت صحبت های کلی در مورد پروژه و دوره داشتیم یک مسیر یادگیری ترسیم کردیم باهم و جاهای که باهم توش وقت گدروندیم رو یاد آوری کردیم. این وسطا اگر به ذهنمون رسید که چیزی از قلم افتاده رو دوباره یکم توضیح دادیم.

  • قسمت آخر رو اختصاص دادیم به یک کوییز و اون رو باهم بررسی کردیم و از اشتباه زدن نترسیدیم و هر چی بلد نبودیم رو گوگل کردیم و یاد گرفتیم. در آخر هم در مورد مصاحبه و فرهنگی که تو مصاحبه باید رعایت کنیم صحبت کردیم. نکته ای که توی ویدیو نگفتیم هم اینکه لطفا در زمان مصاحبه به موقع حاضر بشید. به موقع حاظر شدن نشون دهنده اهمیت به خود و به طرف مقایل و نشانه شخصیت شماست. اگر هم نمیتونید در جلسه شرکت کنید به هر دلیل حتی پنج دقیقه قبل از شروع جلسه زنگ بزنید و خبر بدید که یا یکم تایمش رو جابجا کنند یا به روز دیگه ای جابجا بشه یا کلا کنسل بشه.