آموزش برنامه نویسی

آموزش جنگو در کاشان

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

15 دقیقه مطالعه ۱۱ مرداد ۱۴۰۳ 227 بازدید مرتضی رستمیان
تصویر مقاله آموزش جنگو در کاشان
برنامه نویسی بک‌اند با Django

آموزش Django در کاشان؛ جنگو را طوری یاد بگیریم که بتوانیم با آن پروژه بسازیم

اگر مسیرتان به سمت برنامه نویسی بک‌اند رفته باشد، بعید است اسم Django را ندیده باشید. جنگو روی Python ساخته شده و خیلی از کارهای تکراری یک پروژه وب، مثل ارتباط با دیتابیس، مدیریت کاربر، فرم‌ها و مسیرهای سایت را در یک ساختار مشخص کنار هم می‌آورد.

اینجا قرار نیست فقط اسم فایل‌ها و اصطلاحات جنگو را ردیف کنیم. هدف این است که بفهمیم وقتی کاربر در سایت کاری انجام می‌دهد پشت صحنه چه اتفاقی می‌افتد و هر بخش Django دقیقاً کجای این جریان قرار می‌گیرد. در آخر هم مسیر یادگیری را طوری می‌چینیم که بتوانید آن را روی یک پروژه واقعی تمرین کنید.

لوگوی فریم ورک Django برای آموزش جنگو
Django؛ فریم‌ورک وب Python برای توسعه بک‌اند
اول Python
Django زبان برنامه نویسی نیست

جنگو روی Python بنا شده؛ بنابراین هرچه با پایه‌های Python راحت‌تر باشید، موقع یادگیری Django کمتر درگیر خود زبان می‌شوید و بیشتر روی منطق پروژه تمرکز می‌کنید.

فقط Syntax نه
جریان پروژه را بفهمید

URL، View، Model و Template وقتی واقعاً جا می‌افتند که مسیر یک درخواست واقعی را دنبال کنید و ببینید هرکدام چه بخشی از کار را به عهده می‌گیرند.

یادگیری واقعی
پروژه بسازید

وقتی Model، Form، سیستم کاربر و Admin را روی یک پروژه واقعی کنار هم می‌گذارید، تازه متوجه می‌شوید چرا Django این‌قدر روی ساختار تأکید دارد.

یک نکته مهم قبل از شروع

اول یک سوءتفاهم را کنار بگذاریم؛ Django زبان برنامه نویسی نیست

گاهی می‌شنویم کسی می‌گوید «زبان Django»، اما Django خودش زبان نیست. زبانی که با آن کد می‌نویسید Python است؛ جنگو مجموعه‌ای از ابزارها و قراردادهاست که توسعه وب با Python را منظم‌تر می‌کند.

پس یادگیری Django یعنی یاد گرفتن اینکه چطور با Python یک برنامه وب بسازید که Request را بگیرد، با دیتابیس کار کند، کاربر و فرم را مدیریت کند و در نهایت پاسخ مناسبی به مرورگر برگرداند.

از پایه

Django چیست و چه مشکلی را برای برنامه نویس حل می‌کند؟

فرض کنید می‌خواهید یک سایت واقعی بسازید. خیلی زود می‌بینید بعضی کارها تقریباً در هر پروژه‌ای تکرار می‌شوند: کاربر، دیتابیس، فرم، URL، سطح دسترسی و پردازش درخواست‌ها. نوشتن همه این بخش‌ها از صفر برای هر پروژه هم زمان‌بر است و هم مستعد خطا.

Django بخش زیادی از این زیرساخت تکراری را از قبل آماده کرده و برایش یک ساختار مشخص دارد. نتیجه این است که به‌جای درگیر شدن دوباره با همان مسائل پایه، می‌توانید وقت بیشتری برای منطق مخصوص پروژه بگذارید.

البته این به معنی «ساخت خودکار پروژه» نیست. هنوز باید مدل داده، منطق کسب‌وکار و رفتار سیستم را خودتان طراحی کنید. جنگو فقط کاری می‌کند هر بار برای نیازهای تکراری از نقطه صفر شروع نکنید.

پشت صحنه سایت

Django در بک‌اند کجای ماجرا قرار می‌گیرد؟

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

حالا سبد خرید، ورود کاربر، آدرس و ثبت سفارش را هم اضافه کنید. بیشتر منطق این اتفاق‌ها در بک‌اند اجرا می‌شود؛ جایی که داده و قوانین سیستم کنار هم قرار می‌گیرند.

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

جریان اصلی یک درخواست

Request و Response؛ اول جریان را بفهمید، بعد سراغ فایل‌ها بروید

تقریباً همه‌چیز با یک Request شروع می‌شود. کاربر صفحه‌ای را باز می‌کند یا فرمی می‌فرستد و مرورگر درخواست را به سرور می‌رساند. Django ابتدا مسیر درخواست را می‌بیند تا مشخص کند کدام بخش پروژه باید آن را پردازش کند.

بعد نوبت View است. View ممکن است سراغ Model و دیتابیس برود، اطلاعاتی را بررسی یا پردازش کند و سپس پاسخ را بسازد.

پاسخ هم همیشه HTML نیست؛ ممکن است Redirect، فایل یا داده‌ای در قالب دیگری باشد. اگر این رفت‌وبرگشت را خوب بفهمید، بخش‌های مختلف جنگو دیگر شبیه مجموعه‌ای از فایل‌های بی‌ربط به نظر نمی‌رسند.

مدل ساده ارتباط کلاینت و سرور در توسعه وب
یک نمای ساده از ارتباط Client و Server
هسته ساختار Django

MVT آن‌قدرها هم پیچیده نیست؛ فقط مسئولیت‌ها را جدا می‌کند

ایده MVT ساده است: هر بخش یک مسئولیت مشخص داشته باشد. Model با داده سروکار دارد، View منطق درخواست را مدیریت می‌کند و Template چیزی را که باید کاربر ببیند نمایش می‌دهد.

Model ساختار داده را تعریف می‌کند و ارتباط برنامه با اطلاعات ذخیره‌شده را شکل می‌دهد.
View درخواست را می‌گیرد، منطق لازم را اجرا می‌کند و تصمیم می‌گیرد چه پاسخی برگردد.
Template اطلاعات آماده‌شده را به شکلی که کاربر در HTML می‌بیند نمایش می‌دهد.

Project و App؛ پروژه را به بخش‌های قابل مدیریت تقسیم کنیم

در Django معمولاً یک Project اصلی دارید که تنظیمات کلی آنجاست. قابلیت‌های مختلف را هم می‌توانید در Appهای جدا نگه دارید تا هر بخش مسئول کار مشخصی باشد.

مثلاً در یک فروشگاه اینترنتی، کاربران، محصولات و سفارش‌ها می‌توانند هرکدام App جداگانه‌ای داشته باشند. این کار باعث می‌شود تغییر یک بخش کمتر روی بقیه قسمت‌ها سایه بیندازد.

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

URL Routing؛ هر آدرس باید مقصد مشخصی داشته باشد

وقتی کاربر یک آدرس را باز می‌کند، Django باید بداند این درخواست باید به کدام View برسد. URL Routing همان نقشه‌ای است که این مسیر را مشخص می‌کند.

مثلاً /products/ می‌تواند لیست محصولات را نمایش دهد و مسیر دیگری شناسه یک محصول را بگیرد و صفحه جزئیات همان محصول را باز کند.

URL مرتب فقط ظاهر خوبی ندارد؛ وقتی بعداً سراغ کد برمی‌گردید، راحت‌تر می‌فهمید هر درخواست از کجا وارد پروژه می‌شود.

View؛ جایی که تصمیم می‌گیریم با درخواست چه کار کنیم

وقتی URL مقصد را مشخص کرد، View تصمیم می‌گیرد چه اتفاقی بیفتد. ممکن است از دیتابیس چیزی بخواند، وضعیت کاربر را بررسی کند یا بخشی از منطق برنامه را اجرا کند.

بعد از این مرحله، View می‌تواند داده را به Template بدهد، Redirect کند یا نوع دیگری از Response برگرداند.

Django هم Function-Based View دارد و هم Class-Based View. اوایل مسیر لازم نیست درگیر انتخاب بین این دو شوید؛ مهم‌تر این است که بفهمید View چه مسئولیتی دارد و چه زمانی باید چه کاری انجام دهد.

Template؛ داده‌ای که در بک‌اند آماده شده باید جایی دیده شود

Template فقط یک HTML ثابت نیست. View می‌تواند داده را به آن بدهد و صفحه بر اساس همان اطلاعات ساخته شود؛ مثلاً نام کاربر، لیست محصولات یا نتیجه یک جست‌وجو.

برای نمونه، View محصولات را از دیتابیس می‌گیرد و Template آن‌ها را به شکل کارت، جدول یا هر چیدمان دیگری به کاربر نشان می‌دهد.

با Template Inheritance هم لازم نیست Header، Footer و ساختارهای مشترک را در هر صفحه دوباره بنویسید؛ یک بار تعریف می‌کنید و بقیه صفحات از همان استفاده می‌کنند.

بخش مهم کار با داده

Model و ORM؛ جایی که داده‌های واقعی پروژه وارد بازی می‌شوند

تقریباً هیچ پروژه واقعی بدون داده نیست؛ کاربر، مقاله، محصول، سفارش یا پیام باید جایی ذخیره شوند. در Django شکل این اطلاعات را معمولاً با Model تعریف می‌کنید.

مثلاً Product می‌تواند نام، قیمت، موجودی و تاریخ ایجاد داشته باشد. بعد ORM کاری می‌کند برای بسیاری از کارهای روزمره دیتابیس بتوانید با خود Python کار کنید.

ساختن رکورد، جست‌وجو، فیلتر، ویرایش، حذف و کار با رابطه بین داده‌ها بخش بزرگی از کار روزمره با ORM است.

داده‌ها به هم وصل‌اند؛ رابطه‌ها را از اول درست طراحی کنید

در پروژه واقعی جدول‌ها جزیره‌های جدا نیستند. مقاله نویسنده دارد، سفارش به کاربر وصل است و یک محصول می‌تواند در چند دسته قرار بگیرد.

Django برای همین ارتباط‌ها ابزارهایی مثل ForeignKey، OneToOneField و ManyToManyField در اختیار شما می‌گذارد.

اگر رابطه‌ها را از ابتدا درست طراحی کنید، بعداً هنگام گزارش‌گیری، توسعه قابلیت‌ها و تغییر ساختار داده دردسر خیلی کمتری خواهید داشت.

Migration؛ تغییر Model باید به دیتابیس هم برسد

فرض کنید چند هفته بعد تصمیم می‌گیرید به محصول فیلد تخفیف اضافه کنید. تغییر Model به‌تنهایی کافی نیست؛ دیتابیس هم باید بداند ساختارش تغییر کرده است.

Migration این تغییرات را ثبت و اعمال می‌کند تا ساختار دیتابیس قدم‌به‌قدم همراه Modelهای پروژه جلو برود.

در کار تیمی این موضوع مهم‌تر هم می‌شود، چون همه اعضا باید بتوانند همان تغییرات دیتابیس را روی محیط خودشان اعمال کنند.

Form و Validation؛ به ورودی کاربر بدون بررسی اعتماد نکنید

کاربر ممکن است فیلدی را خالی بگذارد، ایمیل اشتباه وارد کند یا مقداری بفرستد که اصلاً انتظارش را ندارید. قبل از استفاده از این داده‌ها باید آن‌ها را بررسی کنید.

Form و ModelForm در Django کمک می‌کنند هم ساخت فرم‌ها و هم بررسی داده‌های ورودی ساختار مشخص‌تری داشته باشد.

Validation فقط برای نشان دادن پیام خطا به کاربر نیست؛ جلوی ورود داده خراب یا نامعتبر به بخش‌های بعدی سیستم را هم می‌گیرد.

Authentication و Permission؛ فقط ورود مهم نیست، دسترسی هم مهم است

در خیلی از پروژه‌ها ثبت‌نام و ورود جزو اولین نیازهاست. Django برای مدیریت کاربر، رمز عبور، Login و Logout ابزارهای داخلی دارد و لازم نیست همه این بخش‌ها را از صفر بسازید.

اما اینکه کاربر وارد شده باشد کافی نیست. باید مشخص باشد چه چیزهایی را می‌تواند ببیند یا تغییر دهد.

Permission و Group برای همین کار هستند؛ مثلاً مدیر، کارمند و کاربر عادی می‌توانند سطح دسترسی متفاوتی داشته باشند.

یکی از قابلیت‌های معروف Django

Django Admin؛ پنلی که خیلی وقت‌ها چند ساعت کار را کم می‌کند

بعد از تعریف Modelها، می‌توانید خیلی از آن‌ها را در Django Admin ثبت کنید و بدون ساختن پنل جدا، داده‌ها را مدیریت کنید.

ایجاد و ویرایش داده، جست‌وجو، فیلتر و حذف از همان ابتدا در اختیار شماست؛ چیزی که برای پنل‌های داخلی یا شروع پروژه واقعاً کاربردی است.

Admin هم قرار نیست همان ظاهر پیش‌فرض را برای همیشه نگه دارید. ستون‌ها، فیلترها، فرم‌ها و خیلی از رفتارهایش قابل شخصی‌سازی هستند.

نمونه پنل مدیریت Django Admin
نمونه‌ای از محیط Django Admin

Middleware؛ لایه‌ای که می‌تواند قبل و بعد از View وارد عمل شود

Middleware را می‌توان مثل یک لایه در مسیر Request و Response دید؛ قبل از اینکه درخواست به View برسد یا بعد از آماده شدن پاسخ می‌تواند کاری انجام دهد.

بخشی از Session، Authentication و امکانات امنیتی خود Django هم از همین سازوکار استفاده می‌کنند.

وقتی پروژه پیچیده‌تر شود، می‌توانید Middleware اختصاصی خودتان را هم برای نیازهای مشخص سیستم بنویسید.

Static و Media؛ دو دسته فایل که بهتر است از همان اول جدا بمانند

CSS، JavaScript و تصویرهایی که جزو خود رابط سایت هستند معمولاً در گروه Static Files قرار می‌گیرند.

در مقابل، فایل‌هایی که کاربر یا مدیر آپلود می‌کند—مثلاً عکس پروفایل یا تصویر محصول—معمولاً Media Files هستند.

اگر از همان ابتدا این دو را درست جدا کنید، تنظیمات فایل‌ها و Deploy در ادامه خیلی تمیزتر پیش می‌رود.

موضوعی که نباید به آخر پروژه موکول شود

امنیت در Django خیلی فراتر از گذاشتن رمز روی Admin است

ورودی کاربر باید بررسی شود، دسترسی‌ها باید دقیق باشند و اطلاعات حساس نباید بی‌دلیل در دسترس بخش‌های مختلف قرار بگیرند.

Django برای تعدادی از خطرهای رایج وب محافظت‌های داخلی دارد، اما این امکانات جای فهم امنیت را نمی‌گیرند. باید بدانید هرکدام چه کاری می‌کنند و کجا هنوز مسئولیت با خود شماست.

CSRF، Session، Password Hashing و Permission از همان موضوعاتی هستند که اگر قرار است Django را جدی استفاده کنید، نمی‌شود از کنارشان سریع رد شد.

Testing؛ چون همیشه چیزی که می‌شکند همان بخشی نیست که تغییرش داده‌اید

گاهی یک تغییر کوچک در Model یا View بخشی دیگر را خراب می‌کند و حتی همان لحظه متوجهش نمی‌شوید. تست‌های خودکار دقیقاً برای چنین موقعیت‌هایی ارزش پیدا می‌کنند.

با تست می‌توانید رفتار Model، View، Form و منطق اصلی پروژه را بررسی کنید و قبل از رسیدن مشکل به کاربر متوجه آن شوید.

بهتر است تست را بخشی از روند توسعه ببینید، نه کاری که فقط در پایان پروژه و وقتی همه چیز به‌هم ریخته سراغش می‌رویم.

جنگو را کجا می‌توان استفاده کرد؟

با Django چه چیزهایی می‌شود ساخت؟

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

مسیر یادگیری Django؛ از مفاهیم پایه تا یک پروژه واقعی

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

فصل ۱
آشنایی با Django و ساختار Framework
فصل ۲
Project، App و ساختار پروژه
فصل ۳
Request و Response
فصل ۴
URL Routing
فصل ۵
Function-Based و Class-Based View
فصل ۶
Template و Template Inheritance
فصل ۷
Model و طراحی داده
فصل ۸
ORM و QuerySet
فصل ۹
Migration
فصل ۱۰
Form و ModelForm
فصل ۱۱
Authentication
فصل ۱۲
Permission و Group
فصل ۱۳
Django Admin
فصل ۱۴
Static و Media Files
فصل ۱۵
Middleware و Session
فصل ۱۶
امنیت پروژه Django
فصل ۱۷
Testing
فصل ۱۸
طراحی و ساخت پروژه واقعی Django

اشتباه رایج این است که Django را فصل‌به‌فصل حفظ کنیم

اگر Model، URL، View و Template را فقط به‌عنوان چند فصل جدا بخوانید، موقع شروع پروژه احتمالاً سؤال اصلی‌تان این می‌شود که «حالا این‌ها را چطور به هم وصل کنم؟»

راه بهتر این است که از همان ابتدا یک پروژه کوچک کنار دستتان باشد. Model که می‌خوانید یک داده واقعی بسازید؛ Form که یاد می‌گیرید همان داده را از کاربر بگیرید؛ Authentication که رسید، ورود کاربر را به همان پروژه اضافه کنید.

به این شکل، Django کم‌کم از یک فهرست اصطلاحات تبدیل می‌شود به سیستمی که منطقش را می‌فهمید و می‌توانید با آن کار کنید.

سوالات متداول درباره آموزش Django

قبل از Django چقدر Python باید بلد باشم؟

بهتر است حداقل با متغیرها، شرط، حلقه، تابع و ساختارهای داده Python راحت باشید. لازم نیست متخصص Python باشید، اما نباید هنگام کار با Django درگیر فهم پایه‌های خود زبان شوید.

Django بیشتر Front-end است یا Back-end؟

Django عمدتاً برای سمت سرور و بک‌اند استفاده می‌شود. البته Templateهای آن می‌توانند HTML هم تولید کنند، اما نقش اصلی جنگو مدیریت منطق و داده در سمت سرور است.

ORM در Django دقیقاً چه کمکی می‌کند؟

ORM کمک می‌کند بسیاری از کارهای دیتابیس را از طریق Modelها و کد Python انجام دهید؛ از ساخت و فیلتر داده گرفته تا ویرایش، حذف و کار با رابطه‌ها.

فقط دیدن آموزش برای یادگیری Django کافی است؟

نه. تا زمانی که خودتان پروژه نسازید، ارتباط URL، View، Model، Form و بقیه بخش‌ها کامل جا نمی‌افتد. هر مبحث را همان موقع روی یک پروژه کوچک امتحان کنید.

Django برای چه نوع پروژه‌هایی مناسب است؟

فروشگاه، سایت محتوایی، سامانه رزرو، پنل‌های سازمانی و سیستم‌های آموزشی از نمونه‌هایی هستند که می‌توان با Django ساخت. انتخاب معماری مناسب به اندازه خود فریم‌ورک اهمیت دارد.

جمع‌بندی

Django زمانی جا می‌افتد که ارتباط بین بخش‌ها را ببینید

Model، View، URL، Template، Form، Authentication و Admin فصل‌های جدا از هم نیستند. همه آن‌ها اجزای یک سیستم‌اند که با هم یک درخواست را می‌گیرند، پردازش می‌کنند و به پاسخ تبدیل می‌کنند.

وقتی این ارتباط برایتان روشن شود، دیگر لازم نیست دائم اسم فایل‌ها و دستورات را حفظ کنید. کم‌کم توجه‌تان از «کجا چه چیزی بنویسم؟» به «این مسئله را چطور حل کنم؟» منتقل می‌شود.

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