آموزش جنگو (Django) | راهنمای کامل و رایگان جنگو برای شروع


آموزش جنگو بسیار دارای اهمیت است، چرا که جنگو (Django) یک چارچوب نرمافزاری (فریمورک | Framework) مبتنی بر وب برای پایتون به حساب میآید و در حوزه برنامه نویسی وب کاربرد دارد. که با آن میتوان اپلیکیشنهای وب (وباپ | Web Application | Web App) بهتری ساخت. جنگو کار توسعه برنامههای کاربردی وب را آسان میکند. به طوری که، در این راستا کدنویسی کمتری نیاز است و همچنین، برنامهنویسی سرعت بالاتری پیدا میکند. در این مطلب، تاریخچهای از جنگو، کاربردهای جنگو، مزایا و معایب django، دانلود و نصب جنگو، انجام برخی امور اولیه با django، مسیر یادگیری و کلیه موارد لازم برای افرادی که قصد دارند یادگیری جنگو را آغاز کنند، پوشش داده شده است.
جنگو چیست ؟
در این بخش از آموزش جنگو، ابتدا به چیستی و تعریف django پرداخته شده است. جنگو یک فریموُرک وب سطح بالای پایتون است که فرایند توسعه سریع (Rapid Development)، شفاف و با طراحی کاربردی را امکانپذیر میسازد. یک چارچوب نرمافزاری اپلیکیشن وب django، مجموعهای از ابزارهای مبتنی بر قطعات (اجزاء | Component) برای رفع تمامی نیازمندیهای توسعه اپلیکیشن است. هدف اصلی فریمورک جنگو این است که به توسعهدهندگان اجازه داده شود به جای اتلاف وقت و انرژی روی قطعات توسعه داده شده فعلی، روی قطعات و اجزای جدید اپلیکیشن تمرکز داشته باشند.
Django توسط توسعهدهندگانی با تجربه ساخته شده است. به همین دلیل، جنگو از دردسرهای فراوان توسعه وب در امان مانده است؛ تا برنامهنویسان بتوانند بدون نیاز به «اختراع دوباره چرخ»، روی پروژه خود متمرکز شوند. جنگو رایگان و متنباز است. django نسبت به بسیاری دیگر از فریمورکهای پایتون یا سایر فریمورکهای طراحی وب، امکانات و ویژگیهای بیشتری دارد و بسیاری از دردسرهای توسعه وب را از سر راه برداشته است.
در ادامه مطلب آموزش جنگو تاریخچهای از چگونگی خلق و پیدایش جنگو توسط توسعهدهندگان آن بیان شده است.
تاریخچه جنگو
جنگو در اوایل دهه هشتاد شمسی توسط آدرین هولواتی (Adrian Holovaty) و سایمون ویليسون (Simon Willison) خلق شد. آنها django را زمانی ساختند که توسعه یک وب اپلیکیشن با پایتون را شروع کرده بودند. در آن زمان، آنها در روزنامه لارنس ژورنال (Lawrence Journal-World) کار میکردند. به گفته ویلیسون در Quora، در آن زمان و قبل از تحولات PHP5، هر دو آنها از تلاش برای نگهداری سایتهای بزرگ توسعه داده شده با PHP کلافه شده و علاقه شدیدی به پایتون پیدا کرده بودند.
چرا جنگو توسعه داده شد ؟
ابزارهای توسعه وب با پایتون در آن زمان، با استانداردهای مورد انتظار هولواتی و ویلیسون سازگاری نداشتند. به همین دلیل، آنها تصمیم گرفتند که چارچوب نرمافزاری جنگو را توسعه دهند. جیکوب کاپلنماس (Jacob Kaplan-Moss) نیز در مراحل ابتدایی توسعه جنگو استخدام شد. django، حدوداً بعد از دو سال به صورت عمومی و تحت گواهینامه BSD منتشر شد. نام django، از جنگو راینهارت (Django Reinhardt)، نوازنده سرشناس گیتار برگرفته شده است.
در اوایل خرداد ۱۳۸۷، اعلام شد که «بنیاد نرمافزاری جنگو» (Django Software Foundation | DSF) به تازگی شکل گرفته است و این بنیاد، نگهداری جنگو را برعهده خواهد داشت. در ادامه مطلب آموزش جنگو و بخش «جنگو چیست»، به بیان کاربردهای رایج django برای درک بهتر اهمیت آموزش جنگو پرداخته شده است.
کاربردهای جنگو کدامند؟
در این بخش از آموزش جنگو کاربردهای جنگو بیان میشود. جنگو به عنوان یک چارچوب نرمافزاری وب متنباز برای توسعه وبسایتهای سریع، کاربردی، نگهداشتپذیر (Maintainable)، ایمن و دارای طراحی ساختارمند به کار میرود. همانطور که گفته شد، برای اولین بار از جنگو در توسعه یک وب اپلیکیشن برای یک ناشر روزنامه استفاده شد.
در نتیجه، میتوان از جنگو انتظار داشت که در مدیریت پروژههایی با حجم متنی، فایلهای رسانهای و ترافیک بالا و یا هر چیزی که عملکردی شبیه به یک نشریه دورهای مبتنی بر وب داشته باشد، عملکرد قابل قبولی را از خود به نمایش بگذارد.
پروژههایی که میتوان با جنگو توسعه داد چه هستند؟
اگرچه، واضح است که نمیتوان صنعت نشر را تنها حوزه کاربرد فریمورک جنگو دانست. علاوه بر این، آموزش جنگو برای ساخت وبسایتهای تجارت الکترونیک، اپلیکیشنهای حوزه سلامت، حوزه اقتصاد، حمل و نقل، رزرواسیون، شبکههای اجتماعی و بسیاری از کاربردهای دیگر استفاده میشود.
در ادامه فهرست برخی از انواع پروژههایی که میتوان با استفاده از چارچوب نرمافزاری جنگو توسعه داد، ارائه شده است.
- بسترهای مالی با امکاناتی جهت تجزیه-تحلیل و محاسبه نتایج تخمینی بر پایه دادههای فردی، تحمل ریسک و احتمال دستیابی به اهداف
- سیستمهای مدیریت ارتباط با مشتریان (CRM) سفارشی برای دادههای درون سازمانی
- سیستمهای CRM بین سازمانی (B2B) برای مدیریت ارتباط میان کسب و کارها
- بسترهایی برای تسهیل ارتباط میان کسب و کارها و مصرفکنندگان
- موتورهای رزرواسیون یا بسترهای خرید آنلاین با بار سنگین
- وب اپلیکیشنهای موبایل مبتنی بر اندروید و iOS
- سامانههای ارزیابی املاک و مستقلات
- سیستمهای مدیریت اسناد
- بسترهایی برای مدیریت مسائل حقوقی
برخی از شرکتها، ترجیح میدهند پروژههای خود را روی چند چارچوب نرمافزاری مختلف پیادهسازی کنند. همچنین، از جنگو میتوان برای تولید تسهیلات مستقل استفاده کرد.
- سامانه نامهنگاری الکترونیک برای اطلاعرسانی و ارسال اعلانها به کاربران
- سامانه فیلتر کردن نتایج جستجو با منطق پیشرفته و قواعد متغیر به صورت پویا
- تولید کننده (Generator) مبتنی بر الگوریتم
- ابزارهای تحلیل داده
- رابطهایی برای مدیریت صندوقهای سرمایهگذاری
- میزکار ادمین (Admin Dashboard)
- سیستمهای اعتبارسنجی مبتنی بر تصویر
- سایر ویژگیهایی که امکان توسعه بسترهای CRM و B2B، بازارگاههای برخط (Online Marketplace)، سامانههای رزرو و بسیاری از کاربردهای دیگر را تسهیل میکنند.
در ادامه مطلب «آموزش جنگو (Django) | راهنمای کامل و رایگان جنگو برای شروع»، و در راستای توجه بیشتر به اهمیت آموزش جنگو و به کارگیری آن در پروژههای توسعه وب، به طور کامل به مزیتها و نقاط قوت فریمورک جنگو پرداخته شده است.
مزیت های جنگو
در این بخش از مطلب «آموزش جنگو»، ابتدا مزایای بیان شده در سایت رسمی جنگو و سپس، به طور کاملتر و به صورت موردی، مزایای آموزش جنگو ارائه شده است.
سایت رسمی پروژه جنگو، علاوه بر آموزش جنگو و ارائه مستندات مربوطه، مزایا و ویژگیهای مثبت django در توسعه اپلیکیشنهای وب را نیز بیان داشته که در ادامه شرح داده شدهاند.
- بینهایت سریع: جنگو با هدف کمک به توسعهدهندگان وب طراحی شده است تا آنها بتوانند یک اپلیکیشن را از مراحل اولیه تا محصول نهایی، در سریعترین زمان ممکن تولید کنند.
- امکانات متعدد: django دارای امکانات و افزونههای زیادی برای مدیریت فرآیندهای رایج در توسعه وب است. آموزش جنگو امکانات متعددی را برای احراز هویت کاربران، مدیریت محتوا، نقشه سایت، خوراک آراساس (RSS Feeds) و بسیاری از فرآیندهای دیگر فراهم میکند.
- ایمن و اطمینانبخش: امنیت در جنگو یک مقوله جدی و با اهمیت است. آموزش جنگو به توسعهدهندگان کمک میکند از بروز خطاهای امنیتی بسیاری در امان باشند.
- فوقالعاده مقیاسپذیر: برخی از پربازدیدترین سایتها در اینترنت، از قابلیتهای جنگو در مقیاسپذیری سریع و منعطف بهره میبرند. روز به روز، به تعداد این سایتها اضافه میشود.
- بسیار انطباقپذیر: شرکتها، سازمانها و دولتها از آموزش جنگو در کاربردهای گوناگون، از سیستمهای مدیریت محتوا (CMS) گرفته تا شبکههای اجتماعی و بسترهای محاسبات علمی استفاده کردهاند.
علاوه بر نقاط قوت ذکر شده در سایت رسمی جنگو، مزیتها و نقاط مثبت دیگری نیز در ساخت وباپ و توسعه وب با django وجود دارد که در ادامه به آنها پرداخته شده است.
پکیجهای پیشساخته متعدد جنگو
- به جای کدنویسی، توسعهدهندگان میتوانند از پکیجهای پیشساخته برای افزودن امکانات و قابلیتهای مختلف استفاده کنند.
- داشتن پکیجهای پیشساخته متعدد، از اتلاف وقت و انرژی توسعهدهندگان جلوگیری میکند و در نتیجه، برنامهنویسان میتوانند روی افزودن قابلیتهای پیشرفته تمرکز داشته باشند.
- به دلیل متنباز بودن چارچوب وب جنگو، میتوان از پکیجهای توسعه داده شده توسط اعضای اجتماع جهانی آموزش جنگو استفاده کرد.
- میتوان با استفاده از پکیج auth، تأیید هویت انجام داد، با استفاده از پکیج ادمین رابط کاربری ادمین را راهاندازی کرد؛ با پکیج جلسه نیز میتوان مدیریت جلسه را کنترل کرد و با استفاده از بسیاری از پکیجهای دیگر میتوان امکانات و قابلیتهای بسیاری را به سادگی فراهم ساخت.
چارچوب انعطافپذیر جنگو
- برخلاف Ruby on Rails، جنگو از قواعد مربوط به ساز و کار پیکربندی پیروی نمیکند. چرا که django با پایتون نوشته شده و پایتون یک زبان برنامهنویسی همهمنظوره است، بنابراین آموزش جنگو انعطافپذیری و پویایی بیشتری را برای توسعهدهندگان وب فراهم آورده است.
- توسعهدهندگان میتوانند پیکربندی فریمورک جنگو را در لحظه و با توجه به نیازهایشان تنظیم کنند و اپلیکیشنهای تحت وب را توسعه دهند.
- به دلیل این که django با پایتون نوشته شده است، پشتیبانی فوقالعادهای از کتابخانهها و پکیجهای خارجی وجود دارد. به راحتی میتوان هر پکیجی را بدون نگرانیهای امنیتی در جنگو وارد و استفاده کرد.
- در جنگو، به جای تمرکز روی برنامهنویسی تلویحی و ضمنی (Implicit)، تأکید بیشتری روی برنامهنویسی صریح و واضح (Explicit) شده است. این مسئله، جنگو را به یک فریمورک آرمانی برای کاربردها و استفادههایی تبدیل کرده است که نیازمند تغییرات سریع هستند.
سرعت توسعه بالاتر با جنگو
- یکی از مهمترین مزیتهای توسعه وب با جنگو این است که، django امکان توسعه سریعتری را فراهم میکند. استارتاپها و سازمانها میتوانند از آن در توسعه سریع محصولات با پذیرش حداقلی (Minimum Viable Product | MVP) استفاده کنند و زمان بیشتری را روی بازاریابی محصولات خود اختصاص دهند.
- جنگو دارای معیارهای سنجش و محک براری بررسی سرعت توسعه داخلی است. توسعه وب جنگو با پیکربندی و تنظیمات صحیح، منجر به تولید اپلیکیشنهای وب بهینه میشود.
- در حالی که ممکن است تصور شود توسعه وب با django به دلیل پیکربندی پایتون سرعت پایینی دارد، این مسئله در جنگو جبران شده است.
- پیکربندی و طراحی ساختاری فریمورک جنگو به گونهای است که امکان استفاده از چندین قطعه (Component) را در یک لحظه فراهم میکند و در نتیجه توسعه سریع امکانپذیر میشود. توسعهدهندگان میتوانند بدون از دست دادن سرعت توسعه، به صورت موازی کار کنند.
فریمورک جنگو REST برای APIها
- APIها برای افزودن ویژگیهای سطح بالا در یک وب اپلیکیشن بسیار ضروری هستند. چارچوب نرمافزاری جنگو رِست (Django REST Framework) یک کتابخانه پایتون است که ساخت API برای اپلیکیشنها را ممکن میسازد.
- چارچوب REST دارای یک معماری ساختار یافته (ماژولار | Modular) و قابل تنظیم است که توسعه API را سهولت میبخشد.
- برنامهنویسان جنگو علاقه بسیاری به استفاده از فریمورک REST با جنگو دارند؛ چرا که، REST قابلیتها و امکانات مبتنی بر API بسیار قدرتمندی را ارائه میدهد.
- چارچوب رِست دارای یک مرورگر API درونساخته (Internal API Browser) برای سنجش نتایج API است.
- کتابخانه REST، امکان اعمال برخی شخصیسازیها را فراهم میکند که به وسیله سایر فریمورکها مانند FLASK پشتیبانی نمیشوند. فریمورک FLASK یک فریمورک محبوب توسعه وب برای پایتون است،
امکانات یادگیری ماشین در جنگو
- توسعه اپلیکیشن با django به وسیله افرادی که با الگوریتمهای یادگیری ماشین کار میکنند، ترجیح داده میشود. از FLASK نیز میتوان برای پیادهسازی مدلهای یادگیری ماشین استفاده کرد؛ اما به طور کلی FLASK نسبت به جنگو یک فریمورک سبک و مختصر است.
- جنگو در زمینه امکانات یادگیری ماشین نسبت به سایر فریمورکهای وب بسیار پیشرفتهتر است و با برخی از کتابخانههای قدرتمند یادگیری ماشین در پایتون از جمله PyTorch و NumPy سازگاری دارد.
- قابلیتهای محاسباتی و آماری جنگو، آن را تبدیل به بستری ایدهآل برای کاربردهای یادگیری ماشین کرده است.
- django قابلیتهای رگرسیون (Regression) و پیشبینی (Prediction) را فراهم میکند. چنین قابلیتهایی میتوانند به توسعه اپلیکیشن هوشمند منجر شوند.
معایب جنگو
با وجود اینکه فریمورک جنگو سرعت بالایی دارد و به واسطه قابلیتهای برجستهاش در توسعه وب شناخته میشود، هنوز بسیاری از برنامهنویسان از جنگو به عنوان فریمورک اصلی استفاده نمیکنند. به دلیل کاستیهای اندکی که در django وجود دارد، توسعهدهندگان باتجربه گاهی به سختی برای گذار به آن مجاب میشوند.
البته، بنیاد نرمافزاری جنگو به طور مرتب در حال بهبود و بهروزرسانی ویژگیها و امکانات جنگو است و امکان دارد برخی و یا همه معایب ذکر شده در این بخش، در آینده برطرف شوند. در ادامه، برخی از نکات منفی توسعه با جنگو ارائه شده است.
- نداشتن قراردادهای کدنویسی: اکثر برنامهنویسان به دلیل کاستی در قراردادهای کدنویسی (Coding Conventions)، به توسعه وب با جنگو علاقهای ندارند. اگر چه، با دقت بیشتر و جستجو در مستندات جنگو [+]، میتوان استانداردهایی را برای نحوه کدنویسی با جنگو یافت.
- برای پروژههای کوچکتر مناسب نیست: فریمورک جنگو برای پروژهها و محصولات کوچکی که نیازمندیها و امکانات کمتری دارند، چندان مناسب نیست.
- فریمورک غیرقابل تغییر: در خصوص داشتن برخی امکانات جانبی مورد نیاز، چارچوب نرمافزاری جنگو ممکن است تغییرپذیری چندان بالایی نداشته باشد و تاکنون تعداد وابستگیهای نسبتاً محدودی برای آن ارائه شده است. البته، این مسئله با گذشت زمان در حال برطرف شدن است.
- منحنی آموزش با شیب تند: با وجود اینکه جنگو یک فریمورک ساده و تمیز است، ممکن است دشواری نسبی در یادگیری و آموزش جنگو وجود داشته باشد و احتمال دارد یادگیری بسیاری از پیکربندیها و ویژگیهای آن برای برخی توسعهدهندگان آسان نباشد. اگرچه، میتوان با استفاده از فیلم های آموزش جنگو بسیاری از این کاستیها را از بین برد.
آموزش جنگو
در این بخش از مطلب «آموزش جنگو (Django) | راهنمای کامل و رایگان جنگو برای شروع»، همه آن چه برای شناخت جنگو و شروع به کار با آن لازم است، پوشش داده میشود. تا اینجا، آشنایی ابتدایی با جنگو به دست آمده و برخی از قابلیتها و خصوصیات جنگو بیان شده است. در ادامه، قبل از پرداختن به نحوه نصب و راهاندازی جنگو، عناوین و سرفصلهای مهم در آموزش جنگو معرفی شدهاند.
مسیر یادگیری جنگو
در این بخش، موضوعات و مباحث اساسی و مهم در آموزش جنگو و مسیر یادگیری آن معرفی شده است. سپس، نحوه نصب جنگو آموزش داده خواهد شد. بعد از آموزش نصب جنگو و پرداختن به آن در یک نگاه کلی، آموزشهایی با جزئیات بیشتر در مورد سرفصلهای ابتدایی جنگو پوشش داده میشوند.
پیش نیاز های آموزش جنگو
با توجه به اینکه جنگو یک فریمورک پایتون است، داشتن دانش کافی در زمینه پایتون، نقطه آغازین نقشهراه آموزش جنگو به حساب میآید. موضوعات مختلفی که به عنوان پیشنیاز در مورد پایتون و برنامهنویسی باید دانست، در ادامه مطلب آموزش جنگو فهرست شدهاند.
- درک دندانهگذاری (تورفتگی | Indentation) و نحو (سینتکس | Syntax) زبان پایتون
- ساختارهای کنترلی در برنامهنویسی از قبیل حلقههای شرطی
- چگونگی فراخوانی متغیر در یک تابع پایتون و تنظیم مقادیر پیشفرض
- رشتهها و عملیات دستکاری رشتهها
- شناخت مسیرهای پایتون (Python Path) برای دسترسی به فایلهای داده و تصاویر
- درک ماژولهای پایتون (python Modules) و چگونگی وارد کردن ماژولهای خارجی (External Modules)
- شناخت عبارتهای با قاعده (Regular Expression | RE) بسیار ضروری است چرا که به عملیات تایید اعتبار رشته ورودی کاربر کمک میکند.
- دانش لازم در خصوص نحوه استفاده از ساختارهای دادهای تاپل (Tuple) و لیست (List) و ساختار دادههایی که درون این ساختارها ذخیره میشوند.
همچنین، سایر پیشنیازها و مهارتهایی که بهتر است قبل از شروع یادگیری و آموزش جنگو فرا گرفته شوند، در ادامه ارائه شدهاند.
- دانش برنامهنویسی وب ضروری است، چرا که قرار است با جنگو توسعه اپلیکیشنهای وب انجام شود.
- مهمترین مسئله، یادگیری و آشنایی با مفاهیم شیٔگرایی است؛ چرا که، در همان آغاز پروژه، از آن استفاده میشود. دانش شیٔگرایی کمک میکند دادههایی با نوع مشابه در قالب کلاس با هم پیوند داده شوند و در نتیجه، دسترسی به دادهها با متغیری به نام شیٔ امکانپذیر میشود. همچنین، در صورتی که منطق یکسانی وجود داشته باشد، میتوان خطوط کد را مجدداً و چندینبار استفاده کرد. در نتیجه، شیٔگرایی میزان کدنویسی را کاهش میدهد و به دنبال آن، نگهداری (Maintainance) پروژه نیز سادهتر میشود.
- شناخت نگاشتگر شیٔ رابطهای (Object–Relational Mapping | ORM) یکی از پیشنیازهای لازم برای آموزش جنگو است. مزیت اصلی استفاده از ORM در این است که میتوان تبادل داده را میان یک پایگاهداده رابطهای (Relational Database) و مدل اپلیکیشن (Application Model) انجام داد. این کار امکان توسعه سریع برنامه کاربردی وب را فراهم میسازد. تغییر پایگاهداده با استفاده از ORM، بسیار سادهتر است؛ به این دلیل که توسعهدهنده نیازی به کدنویسی SQL نخواهد داشت. ORM، شاخص اشیاء را به جدول متناظرش نگاشت میکند.
- CSS ،HTML و JavaScript از عناصر اصلی توسعه وب هستند و بنابراین، کسب دانش کافی در مورد آنها ضروری به نظر میرسد.
- Jquery یک فریمورک جاوا اسکریپت است که میتوان با استفاده از آن، وظایف رایج بسیاری را انجام داد که نیازمند کدنویسی به زبان JavaScript هستند و این وظایف را در قالب متدهای قابل فراخوانی با تنها یک خط کد، بستهبندی کرد.
ممکن است با دیدن این پیشنیازها و تعداد زیاد آنها ناامیدی و دلسردی در افراد برای شروع آموزش جنگو به وجود بیاید. اما، تمام این پیشنیازها در اکثر زبانها و روشهای توسعه وب نظیر #C و جاوا، بسیار رایج و معمول هستند. به طور خاص، پایتون به شدت ساده و سر راست و استفاده از آن به همراه فریمورک جنگو، نسبت به سایر روشها بسیار بهتر است.
حتی میتوان به طور موازی نسبت به یادگیری پایتون و آموزش جنگو اقدام کرد. پس از یادگیری و کسب مهارت کافی در خصوص پیشنیازها، نوبت به مباحث و موضوعات مهم در آموزش جنگو میرسد. در ادامه، به معرفی این مباحث بر اساس مستندات رسمی پروژه جنگو پرداخته شده است.
موضوعات اصلی جنگو
موضوعات مهم آموزش جنگو را میتوان در هفت عنوان دستهبندی کرد. در ادامه، این موضوعات و عناوین مهم فهرست شدهاند.
- بخش یک: درخواستها و بازخوردها (Requests and Responses)
- بخش دو: مدلها و سایت ادمین (Models and the Admin Site)
- بخش سه: نماها و قالبها (Views and Templates)
- بخش چهار: فرمها و نماهای وابسته (Forms and Generic Views)
- بخش پنج: آزمایش (Testing)
- بخش شش: فایلهای ایستا (Static Files)
- بخش هفت: شخصیسازی سایت ادمین (Customizing the Admin Site)
سازمان مستندات آموزش جنگو
پروژه جنگو دارای حجم زیادی از مستندات است. طبیعتاً، یکی از منابع مهم و قابل اتکا در یادگیری و آموزش جنگو، مستندات رسمی موجود در سایت رسمی پروژه Django است. همچنین، حین توسعه و کار روی پروژهها، ممکن است توسعهدهندگان نیاز به جستجو در مستندات جنگو داشته باشند.
در نتیجه، یک نگاه کلی به نحوه سازماندهی این مستندات میتواند در مسیر آموزش جنگو بسیار کارساز و راهگشا باشد.
- درسنامهها به صورت گامبهگام کاربران را با مراحل ساخت یک وب اپلیکیشن آشنا میسازند و برای افرادی مناسب هستند که به تازگی قصد آموزش جنگو را دارند.
- راهنمای عناوین موضوعات و مؤلفههای کلیدی را در سطح نسبتاً بالایی مورد بحث قرار میدهد و اطلاعات و توضیحات پیشزمینه کاربردی را ارائه میکند.
- راهنماهای مرجع حاوی منابع فنی برای APIها و سایر جنبههای ساختار جنگو است. این راهنماها نحوه عملکرد و استفاده از این جنبهها را معرفی میکنند؛ البته، با این فرض که کاربر درک مقدماتی از مفاهیم کلیدی داشته باشد.
- راهنماهای «چگونه» (How-to Guide) درست مثل دستور آشپزی هستند. این نوع راهنماها، کاربران را در قالب مراحل گامبهگام با مسائل کلیدی و کاربردهای آنها آشنا میکنند.
معرفی فیلم آموزش جنگو
- فیلم آموزش جنگو (جنگو) (زمان: ۸ ساعت و ۱۵ دقیقه ، مدرس: مهندس پدرام شاه صفی): برای علاقهمندان و فعالان حوزه توسعه و طراحی وب مناسب است. برای مشاهده فیلم آموزش جنگو (جنگو) + کلیک کنید.
- آموزش برنامه نویسی پایتون (Python) - مقدماتی (زمان: ۱۹ ساعت و ۵۳ دقیقه، مدرس: مهندس پدرام اقبالی شمس آبادی): برای علاقهمندان و دانشجویان در حوزه برنامهنویسی و توسعه نرمافزار مناسب است. برای مشاهده آموزش برنامه نویسی پایتون (Python) - مقدماتی + کلیک کنید.
- فیلم آموزش زبان برنامه نویسی پایتون (Python) همراه با مثال های عملی (زمان: ۱۳ ساعت و ۲۰ دقیقه، مدرس: مهندس فرشید شیرافکن): برای دانشجویان، علاقهمندان و فعالان حوزه برنامهنویسی و توسعه نرمافزار مناسب است. برای مشاهده فیلم آموزش زبان برنامه نویسی پایتون (Python) همراه با مثالهای عملی + کلیک کنید.
- فیلم آموزش آموزش برنامه نویسی شی گرا در Python (پایتون) (زمان: ۷ ساعت و ۲۹ دقیقه، مدرس: مهندس فرشید شیرافکن): برای دانشجویان و علاقهمندان و فعالین حوزه برنامهنویسی و توسعه نرمافزار مناسب است. برای مشاهده فیلم آموزش برنامه نویسی شی گرا در Python (پایتون) + کلیک کنید.
- فیلم آموزش فریم ورک Django Rest در پایتون برای ساخت Web APIs (زمان: ۴ ساعت و ۳۰ دقیقه، مدرس: مهندس مجید ایرانپور): برای دانشجویان، علاقهمندان و فعالین حوزه طراحی و توسعه وب و علاقهمندان به توسعه و ساخت API مناسب است. برای مشاهده فیلم آموزش فریم ورک Django Rest در پایتون برای ساخت Web APIs + کلیک کنید.
قبل از اینکه بتوان از جنگو استفاده کرد و قبل از پرداختن به آموزش جنگو، ابتدا باید بتوان جنگو را روی سیستم نصب کرد.
آموزش نصب و راه اندازی جنگو
در این بخش از مطلب آموزش جنگو، راهنمای کامل نصب جنگو ارائه شده است. در این راهنما، کلیات و نکات اصلی و مهم در روند نصب جنگو به طور کامل شرح داده شده است. همچنین، به منابع و مستندات رسمی آموزش جنگو جهت دسترسی به جزئیات دقیقتر لینک داده شده است.
نصب پایتون
قبل از نصب جنگو، با توجه به این که جنگو یک چارچوب نرمافزاری مبتنی بر پایتون و به آن وابسته است، ابتدا باید پایتون را نصب کرد. به صورت رسمی، برای هر نسخه پایتون، تنها آخرین ریزانتشار (ریزنسخه | Micro Version | Micro Release) آن، که به شکل A.B.C است، پشتیبانی میشود. آخرین ریزنسخه را برای هر سری میتوان در صفحه دانلود پایتون یافت.
برای آموزش جنگو، استفاده از Python 3 پیشنهاد میشود. چرا که، پشتیبانی از نسخه ۲ پایتون به زودی تعلیق خواهد شد و دیگر امکان توسعه با آن وجود نخواهد داشت. نسخه 1.11 جنگو در زمان تدوین این مطلب، آخرین نسخهای است که از پایتون 2.7 پشتیبانی میکند. در مستندات آموزش جنگو اعلام شده است که پشتیبانی از Python 2.7 و Django 1.11، از سال ۱۴۰۰ حذف خواهد شد.
همچنین، در صورتی که کدها در تولیدات تجاری استفاده میشوند، باید از نسخه منتشر شده پایدار (Stable) پایتون استفاده کرد. پروژه جنگو، حدوداً هر نه ماه یک نسخه پایدار جدید منتشر میکند که حاوی بهروزرسانیها و رفع باگها است. آخرین نسخه پایتون را میتوان از بخش دانلود سایت پایتون یافت. آموزش نصب پایتون در ویندوز در مجله فرادرس موجود است. با تایپ کردن عبارت Python در شل (Shell)، میتوان نصب بودن پایتون روی سیستم عامل را بررسی کرد. در صورت نصب بودن پایتون روی سیستم عامل، خروجی به صورت زیر خواهد بود.
Python 3.x.y [GCC 4.x] on linux Type "help", "copyright", "credits" or "license" for more information. >>>
آموزش نصب Apache و mod_wsgi
خود جنگو دارای یک وبسرور سبک است که میتوان از آن برای مصارف آزمایشی استفاده کرد. یک وبسرور به درخواستهای کاربر برای باز کردن صفحات وب رسیدگی میکند. تا زمانی که افراد تازه کار در آموزش جنگو آمادگی به کارگیری جنگو در مصارف تولیدی را ندارند، نیازی به راهاندازی و نصب Apache وجود ندارد. آپاچی یکی از پراستفادهترین وبسرورها در جهان است. خدمات دهنده وب (وب سرور | Web Server) آپاچی یک نرمافزار متنباز و رایگان است.
اگر قرار است آموزش جنگو برای تولید یک سایت استفاده شود، توصیه میشود Apache با mod_wsgi به کار گرفته شود. mod_wsgi یک پکیج برای پیادهسازی ماژول آپاچی است. mod_wsgi میتواند میزبانی هر اپلیکیشن وب مبتنی بر پایتون، که از خصوصیات WSGI پشتیبانی میکند را برعهده بگیرد. WSGI درگاه رابط وب سرور است.
WSGI مشخصاتی است که نحوه ارتباط یک وبسرور با اپلیکیشنهای وب را توصیف میکند. جنگو با هر نسخه از Apache که از mod_wsgi پشتیبانی کند سازگاری دارد. مستندات رسمی mod_wsgi [+]، منبع کامل نحوه استفاده و نصب mod_wsgi است. پس از نصب و فعالسازی mod_wsgi، برای تنظیمات لازم جهت استفاده از جنگو با Apache و mod_wsgi، میتوان به صفحه مربوطه در مستندات رسمی پروژه آموزش جنگو مراجعه کرد.
آموزش نصب پایگاه داده
پایتون یک پایگاهداده سبک به نام SQLite دارد. بنابراین، در سطوح ابتدایی آموزش جنگو، نیاز چندانی به نصب پایگاهداده وجود ندارد. اما اگر نیاز به استفاده از یک موتور پایگاه داده بزرگ وجود داشته باشد، جنگو بسیاری از سرورهای پایگاهداده را پشتیبانی میکند و به طور رسمی به همراه Oracle ،MySQL ،MariaDB ،PostgreSQL و SQLite پشتیبانی میشود.
علاوه بر پایگاهدادههایی که به طور رسمی پشتیبانی میشوند، بکاندهای جانبی دیگری هم وجود دارند که امکان استفاده از سایر پایگاههای داده را فراهم میکنند. علاوه بر بکاند پایگاهداده، باید از نصب بودن الزامات و پیوندهای پایگاهداده پایتون نیز اطمینان حاصل شود. برای کسب اطلاعات بیشتر در خصوص نحوه نصب و تنظیمات لازم در هر یک از پایگاهدادههای رسمی جنگو، میتوان به بخش پایگاهداده در مستندات رسمی پروژه جنگو و همچنین فیلمهای آموزشی مربوطه مراجعه کرد.
آموزش نصب جنگو
سه روش برای نصب جنگو وجود دارد:
- نصب یک نسخه رسمی؛ برای اکثر کاربران این بهترین راه است.
- نصب نسخهای از جنگو که توسط توزیع سیستم عامل کاربر ارائه شده است.
- نصب آخرین نسخه توسعه داده برای علاقهمندانی مناسب است که تمایل دارند از آخرین و بهترین ویژگیها بهرهمند شوند و نگرانی بابت استفاده از آخرین نسخه نداشته باشند. این افراد، ممکن است با باگهای جدید در آخرین نسخه توسعه داده شده مواجه شوند. اما، گزارش این خطاها و مشکلات به توسعه و ارائه نسخه پایدار جنگو کمک میکند. همچنین، احتمال کمتری برای سازگاری بستههای شخص ثالث (Third-Party Packages) با آخرین نسخه وجود دارد.
جنگو تحت گواهینامه BSD به صورت متنباز در دسترس است. دانلود و نصب جنگو به صورت دستوری در پایتون انجام میشود. دستورالعمل نصب جنگو بسته به انتخاب هر کدام از این روشها متفاوت است. در ادامه آموزش جنگو، نحوه نصب جنگو با استفاده از هر کدام از این سه روش، بیان شده است.
آموزش نصب نسخه رسمی جنگو
دو روش برای نصب نسخه رسمی جنگو وجود دارد که در ادامه آموزش جنگو به هر یک از این دو روش پرداخته شده است.
استفاده از pip: برای نصب نسخه رسمی در این روش، ابتدا باید pip را نصب کرد. سادهترین راه نصب pip، استفاده از نصاب کننده مستقل pip است. در صورتی که pip از قبل نصب شده باشد، باید از آخرین نسخه آن استفاده کرد و در صورت نیاز، آن را بهروزرسانی کرد. اگر نسخه pip قدیمی باشد، امکان نصب جنگو وجود نخواهد داشت. برای نصب جنگو، استفاده از آخرین نسخه پایتون پیشنهاد میشود. در حال حاضر و در زمان تدوین این مطلب، آخرین نسخه رسمی جنگو، 3.1.4 و دستور نصب آن به صورت زیر است:
استفاده از venv :venv، محیطهای ایزوله شده مجازی پایتون را فراهم میسازد که نسبت به نصب پکیجهای عمومی در سراسر سطح سیستم (Systemwide Packages) بسیار کاربردیتر است. همچنین، استفاده از venv امکان نصب پکیجها را بدون نیاز به مجوز Admin فراهم میکند. جهت ایجاد یک محیط مجازی برای یک پروژه، پس از باز کردن خط فرمان (Command Prompt)، باید کد زیر را در محل پروژه جدید وارد کرد.
کد بالا یک پوشه را در صورتی که از قبل وجود نداشته باشد، به نام «project-name»، ایجاد میکند. اکنون، برای فعالسازی محیط مجازی، باید کد زیر را اجرا کرد.
بدین ترتیب، محیط مجازی فعال و نام پروژه (project-name) در کنار خط فرمان برای مشخص کردن این مسئله نشان داده میشود. هر بار که یک خط فرمان جدید باز شود، باید محیط مجازی را مجدداً فعالسازی کرد. پس از ساختن محیط مجازی و فعالسازی آن، برای نصب جنگو باید دستور زیر را وارد کرد:
آموزش نصب یک پکیج با توزیع مشخص جنگو: در این روش، یک توزیع کننده شخص ثالث، نسخههایی از جنگو را به همراه سیستمهای مدیریت پکیج آن فراهم میکند. این کار، روند نصب و بهروزرسانی را برای کاربران جنگو بسیار سادهتر میکند. چرا که این اجتماع و یکپارچگی (Integration) امکان نصب خودکار وابستگیهای مورد نیاز django را شامل میشود.
آموزش نصب آخرین نسخه توسعه داده شده: اگر کاربران ترجیح بدهند که از آخرین بهروزرسانیها و تغییرات آخرین نسخه django بهرهمند شوند، آخرین نسخه توسعه داده شده جنگو در انباره گیت (Git Repository) این پروژه در دسترس است. این نسخه کنترل بازبینی (Revision-Control) است و برای کاربران باتجربهای مناسب است که میخواهند تغییرات جدید را مورد آزمایش قرار دهند و به شناسایی باگها قبل از انتشار نسخه رسمی کمک کنند. برای نصب این نسخه باید موارد زیر را انجام داد:
ابتدا باید از نصب بودن گیت (Git) اطمینان حاصل شود. همچنین، باید مطمئن شد دستورات گیت در یک شل (خط فرمان) قابل اجرا است (برای بررسی این مورد، میتوان از دستور git help کمک گرفت). سپس، باید به صورت زیر، شاخه اصلی توسعه جنگو (Django’s Main Development Branch) بررسی شود (کد زیر یک شاخه به نام django در شاخه فعلی ایجاد میکند).
پس از آن، باید اطمینان حاصل شود که مفسر پایتون امکان بارگذاری کد جنگو را داشته باشد. سادهترین راه برای انجام این کار، استفاده از یک محیط مجازی و pip است. پس از راهاندازی و فعالسازی محیط مجازی، باید دستور زیر را اجرا کرد:
این کار باعث میشود کدهای جنگو قابل import کردن شوند و همچنین، امکان استفاده از دستور ابزاری django-admin در دسترس خواهد بود و همه چیز آماده شروع به کار است. برای اطمینان از اینکه نصب django به درستی انجام شده است، ابتدا باید در شل عبارت «python» را وارد کرد و پس از ورود به Python Prompt، به صورت زیر جنگو را Import کرد.
خط دوم در کد بالا، نسخه نصب شده جنگو را در خروجی چاپ میکند. بنابراین، با دیدن نسخه نصب شده در خروجی، میتوان از نصب صحیح جنگو اطمینان حاصل کرد. در ادامه مطلب «آموزش جنگو»، در قالب یک مثال، آموزش ساخت اولی اپلیکیشن با جنگو ارائه شده است.
آموزش ساخت اولین اپلیکیشن با جنگو
در ادامه آموزش جنگو و پس از نصب django، حال نوبت به آن رسیده است تا اولین وب اپلیکیشن را با استفاده از جنگو توسعه داد. در هر بخش از آموزشهای ساخت اولین اپلیکیشن با جنگو در مستندات رسمی آن، هر یک از هفت موضوع اصلی مورد نیاز برای یادگیری کلی django ارائه شده است.
پیش از این، عناوین این موضوعات در بخش موضوعات اصلی django معرفی شدند. در این بخش از آموزش جنگو، مباحث ابتدایی در توسعه اولین اپلیکیشن به همراه برخی جزئیات و خصوصیات ساختاری جنگو بیان شده است. برای یادگیری بیشتر و کاملتر، استفاده از دورههای آموزشی مرتبط پیشنهاد میشود.
درخواستها و بازخوردها در جنگو
در این بخش از آموزش جنگو، مفاهیم درخواست و بازخورد در جنگو در قالب ساخت یک اپلیکیشن رأیگیری ساده آموزش داده میشود. این اپلیکیشن رأیگیری دارای دو بخش است.
- یک سایت عمومی که به افراد اجازه میدهد رأیها را مشاهده کنند و همچنین رأی بدهند.
- یک سایت ادمین که امکان افزودن، تغییر دادن و حذف کردن رأیها را فراهم میکند.
در ابتدا، باید کدهایی که منجر به ایجاد یک پروژه django میشوند را به صورت خودکار تولید کرد. این کدها، دستهای از تنظیمات را برای یک نمونه جنگو (رخداد جنگو | Django Instance) به صورت خودکار انجام میدهند. یک رخداد جنگو شامل تنظیمات پایگاهداده، گزینههای مختص جنگو و تنظیمات مربوط به اپلیکیشن است. به صورت زیر، در خط فرمان، ابتدا باید از شاخه فعلی به شاخهای رفت که قصد ذخیره کدها در آن وجود دارد.
این کار، یک شاخه جدید در شاخه فعلی ایجاد میکند. آنچه دستور startproject ایجاد میکند، به صورت زیر است.
mysite/ manage.py mysite/ __init__.py settings.py urls.py asgi.py wsgi.py
در ادامه، هر یک از فایلهای ایجاد شده تشریح شدهاند.
- شاخه خارجی /mysite محفظه نگهداری (Container) پروژه است. نامش برای جنگو اهمیتی ندارد و امکان تغییر آن به نام دلخواه وجود دارد.
- فایل manage.py یک امکان خط فرمان است که به کاربر اجازه میدهد به روشهای مختلف با این پروژه django در تعامل باشد. جزئیات کامل در این خصوص، در مستندات رسمی مربوط به ادمین جنگو و فایل manage.py موجود است.
- شاخه داخلی /mysite همان پکیج کنونی پایتون برای پروژه است. نام فایلهای درون شاخه/mysite، شامل اسم پروژه است که در اینجا mysite نام دارد و به همراه یک نقطه و بعد از آن نام پکیج پایتونی درج میشود که قرار است در داخل آن پوشه استفاده شود. به عنوان مثال: mysite.urls.
- mysite/__init__.py یک فایل خالی است که به پایتون میگوید این شاخه باید به عنوان یک پکیج پایتون در نظر گرفته شود.
- mysite/settings.py فایلی است که تنظیمات و پیکربندی مربوط پروژه فعلی جنگو در آن قرار دارد.
- mysite/urls.py اعلان منبعیابهای یکپارچه (Uniform Resource Locator | URL) مربوط به پروژه جنگو فعلی میشود که به صورت یک «فهرست مطالب» از سایت مبتنی بر جنگو است.
- mysite/asgi.py یک نقطه ورود برای سرورهای وب سازگار با SGI جهت خدمتدهی به پروژه مربوطه است.
- mysite/wsgi.py یک نقطه ورود برای سرورهای وب سازگار با WSGI جهت خدمتدهی به پروژه مربوطه است.
سرور توسعه
باید بررسی شود آیا پروژه django تا به این جای کار به درستی کار میکند یا خیر. برای این کار، ابتدا باید پوشه فعلی را به شاخه mysite خارجی تغییر داد و سپس دستور زیر اجرا کرد.
خروجی به صورت زیر در خط فرمان مشاهده میشود:
Performing system checks... System check identified no issues (0 silenced). You have unapplied migrations; your app may not work properly until they are applied. Run 'python manage.py migrate' to apply them. December 11, 2020 - 15:50:53 Django version 3.1, using settings 'mysite.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.
اکنون، یک سرور توسعه جنگو شروع به کار کرده که یک خدمات دهنده وب (وب سرور | Web Server) سبک وزن محسوب میشود. این وب سرور، به طور کامل در پایتون نوشته شده و با هدف سرعت بخشیدن به روند توسعه در جنگو گنجانده شده است و با استفاده از آن، افراد مبتدی نیازی به انجام پیکربندی یک سرور در سطح تولید، مثل Apache را ندارند. در صورتی که پس از راهاندازی سرور، با استفاده از مرورگر به آدرس http://127.0.0.1:8000/ مراجعه شود، یک صفحه تبریک ظاهر میشود.
ساخت اپلیکیشن رأیگیری
اکنون، یک «پروژه» راهاندازی و ساخته شده است و میتوان کار را آغاز کرد. هر اپلیکیشنی که در جنگو نوشته میشود، شامل یک پکیج پایتون است که این پکیج، از یک قرارداد پیروی میکند. جنگو این امکان را دارد که به صورت خودکار ساختار شاخهای و پوشههای یک اپلیکیشن را ایجاد کند. در نتیجه، کاربر میتواند به جای ساختن شاخهها، روی کدنویسی تمرکز داشته باشد.
تفاوت میان یک پروژه و یک اپلیکیشن جنگو در چیست؟
یک App، اپلیکیشن وبی است که کاری را انجام میدهد؛ به عنوان مثال، یک سامانه وبلاگ (مجله)، پایگاهدادهای از بایگانی عمومی و یا یک اپلیکیشن رأیگیری کوچک، همگی نمونههایی از یک اپلیکیشن هستند. یک پروژه، گروهی از پیکربندیها و Appها برای یک وب سایت خاص را شامل میشود. یک پروژه میتواند شامل چندین App باشد. همچنین، یک App میتواند در چندین پروژه وجود داشته باشد.
اپلیکیشن میتواند در هر جایی در مسیر پایتون (python Path) ذخیره شود. در این آموزش، اپلیکیشن رأیگیری در مسیر یکسانی با فایل manage.py ساخته شده است. این کار به این دلیل انجام شده است که به جای این که اپلیکیشن یک زیرماژول از پروژه mysite باشد، امکان Import کردن آن در ماژول با بالاترین سطح مربوط به خودش وجود داشته باشد. برای ساخت اپلیکیشن، باید مطمئن شد که پوشه فعلی همان پوشهای است که فایل manage.py در آن قرار دارد. سپس، کد زیر برای ایجاد شاخه polls را اجرا کرد.
در نتیجه، ساختار پوشههای پروژه به صورت زیر خواهد بود:
polls/ __init__.py admin.py apps.py migrations/ __init__.py models.py tests.py views.py
کدنویسی اولین نما
برای نوشتن اولین نما (View)، ابتدا باید فایل polls/views.py را باز و کد پایتون زیر داخل آن کپی شود:
این سادهترین نمای ممکن در جنگو است. برای فراخوانی View، باید آن را به یک URL نگاشت کرد و برای همین به یک URLconf نیاز است. برای ساخت یک URLconf در شاخه polls، باید یک فایل به نام urls.py ساخته شود. اکنون، پوشه اپلیکیشن به شکل زیر در میآید:
polls/ __init__.py admin.py apps.py migrations/ __init__.py models.py tests.py urls.py views.py
فایل polls/urls.py، باید حاوی کدهای زیر باشد:
قدم بعدی این است که «URLconf ریشه» (Root URLconf) به ماژول polls.urls اشاره کند. در مسیر mysite/urls.py، باید تابع include از کتابخانه django.urls بارگذاری (Import) و همچنین، تابع ()include در لیست urlpatterns، به صورت زیر درج شود:
تابع ()include امکان ارجاع به سایر URLconfها را فراهم میکند. هرگاه جنگو با تابع ()include مواجه میشود، هر بخشی از URL را که تا آن مرحله مطابقت داشته، میبُرد و رشته باقیمانده را برای پردازش بیشتر به URLConf مربوطه ارسال میکند. انگیزه استفاده از تابع ()include سادهسازی روند اتصال و اجرا (Plug-and-Play) یوآرالها است. چون رأیها در URLconf مختص خودشان (polls/urls.py) هستند، میتوان آنها را در مسیر «/polls/» یا «/fun_polls/» و یا «/content/polls/» و یا هر مسیر دیگری قرار داد و اپلیکیشن همچنان کار خواهد کرد.
چه زمانی باید از ()include استفاده کرد؟
همیشه وقتی الگوهای URL دیگری لحاظ میشوند، از ()include استفاده میشود. تنها استثناء در این خصوص، admin.site.urls است. حالا، یک نمای شاخص (Index View) به URLconf مربوطه ارتباط داده شده است.
میتوان عملکرد صحیح آن را با دستور زیر ارزیابی کرد:
اکنون، با وارد کردن آدرس «http://localhost:8000/polls/» در مرورگر، باید متن «Hello, world. You're at the polls index» در صفحه مشاهده شود. این متن در نمای شاخص تعریف شده است.
مدل ها
در این بخش از آموزش جنگو و در ادامه توسعه اولین اپلیکیشن با جنگو، برپایی پایگاهداده صورت میگیرد و اولین مدل ساخته شده است.
راه اندازی پایگاه داده در جنگو
با باز کردن فایل mysite/settings.py، ملاحظه میشود که یک ماژول پایتون عادی با متغیرهای سطح-ماژول (Module-Level)، تنظیمات جنگو را ارائه میدهد. به صورت پیشفرض، پیکربندی پایگاهداده از SQLite استفاده میکند. برای شروع کار با جنگو در سطح مبتدی، SQLite بهترین انتخاب است.
SQLite به صورت توکار همراه با پایتون عرضه میشود. بنابراین، نیاز به نصب چیز دیگری برای پشتیبانی از پایگاه داده وجود ندارد. اگرچه، برای آغاز فعالیت حرفهای و شروع یک پروژه واقعی، توصیه میشود از یک پایگاه داده با مقیاسپذیری بیشتر، مانند PostgreSQL، استفاده شود تا بتوان از دردسرهای تغییر پایگاهداده در طول پروژه اجتناب کرد.
در صورتی که تمایل به استفاده از پایگاهداده دیگری (به غیر از SQLite) وجود داشته باشد، نیاز است انقیاد (Binding) مربوط به پایگاهداده مورد نظر نصب شوند و همچنین، کلیدهای زیر در آیتم پیشفرض پایگاهداده تغییر داده شوند تا با تنظیمات پایگاهداده نصب شده انطباق پیدا کنند.
- ENGINE - بسته به پایگاه دادهای که انتخاب شده است، مقادیر این کلید میتواند django.db.backends.mysql ،django.db.backends.postgresql ،django.db.backends.sqlite3 یا django.db.backends.oracle باشد. بکاندهای دیگری هم در دسترس هستند.
- NAME - نام پایگاهداده است. اگر از SQLite استفاده میشود، پایگاهداده یک فایل روی کامپیوتر خواهد بود. در چنین حالتی، NAME باید مسیر کامل و قطعی باشد که شامل نام آن فایل هم میشود. مقدار پیشفرض آن که «'BASE_DIR / 'db.sqlite3» است، فایل پایگاهداده را در شاخه پروژه ذخیره میکند.
اگر از SQLite به عنوان پایگاهداده استفاده نشود، تنظیمات دیگری مثل «PASSWORD»، «USER» و «HOST» نیز باید اضافه شوند. در حین ویرایش فایل تنظیمات (mysite/settings.py)، متغییر TIME_ZONE باید مطابق با منطقه زمانی کاربر تنظیم شود. همچنین، باید تنظیمات INSTALLED_APPS را نیز در بالای فایل تنظیمات در نظر داشت.
این متغیر، اسامی همه اپلیکیشنهای جنگویی که در این رخداد جنگو فعال شدهاند را در خود جای داده است. از اپلیکیشنها میتوان در چندین پروژه استفاده کرد و همچنین، میتوان اپلیکیشنها را بستهبندی (پکیج) و آنها را برای استفاده دیگران در سایر پروژهها توزیع کرد.
ایجاد مدل ها در جنگو
اکنون، مدل ها در پروژه تعریف میشوند. مدل ها در واقع، چیدمان پایگاهداده به همراه دادههای جانبی (Metadata) هستند. یک مدل، تنها منبع قطعی حقیقت پیرامون دادهها است. مدلها شامل زمینه و رفتار دادههای ذخیره شده میشوند. جنگو از اصل DRY (سرنامی برای عبارت Don't Repeat Yourself) استفاده میکند. در قاعده DRY، هدف تعریف مدل دادهها (Data Model) در یک محل است؛ به طوری که سایر چیزها به صورت خودکار از این دادهها ناشی شوند.
در اپلیکیشن رأیگیری، دو مدل ایجاد میشود؛ مدل سئوال (Question) و مدل انتخاب (Choice). مدل سئوال حاوی یک سئوال و یک تاریخ انتشار است. یک انتخاب دو فیلد دارد: متن آن انتخاب و یک شمارش رأی. هر انتخاب با یک سئوال همراه است. در ادامه، این مفاهیم به وسیله کلاسهای پایتون ارائه شده است. این کلاسها باید در فایل polls/models.py به صورت زیر ذخیره شوند.
در اینجا، هر مدل به صورت یک کلاس ارائه شده است. هر یک از این کلاسها، زیرکلاسی از django.db.models.Model هستند. هر مدل دارای تعدادی متغیر کلاس است؛ هر کدام از این متغیرها، نمایانگر یک فیلد پایگاهداده در مدل هستند. هر فیلد توسط یک رخداد از یک کلاس Field نمود پیدا میکند. به عنوان مثال، CharField برای فیلدهای کاراکتر و DateTimeField بیانگر فیلدهای تاریخ زمانی (Datetime) است. به این صورت، جنگو از نوع داده نگهداری شده در فیلدها مطلع میشود.
برخی از کلاسهای فیلد، دارای متغیرهای الزامی هستند. برای مثال، CharField، باید حتماً یک max_length داشته باشد. همچنین، یک فیلد میتواند دارای چندین متغیر اختیاری باشد. مثلاً مقدار پیشفرض votes صفر قرار داده شده است. در نهایت، باید توجه داشت که یک ارتباط با استفاده از ForeignKey تعریف شده است که به جنگو میگوید هر انتخاب با یک سئوال در ارتباط است. جنگو انواع روابط پایگاهداده چند-به-یک (Many-to-One)، چند-به-چند (Many-to-Many) و یک-به-یک (One-to-One) را پشتیبانی میکند.
فعال سازی مدل ها در جنگو
قطعه کد کوچکی در بالا آمده است، اطلاعات زیادی به جنگو میدهد. با این اطلاعات، جنگو قادر است:
- یک طرحواره پایگاهداده (الگو | Database Scheme) را برای این app ایجاد کند.
- یک API دسترسی پایگاهداده پایتون (Python Database-Access API) برای دسترسی به اشیاء «سئوال» و «انتخاب» ایجاد کند.
اما قبل از آن، باید به پروژه فهمانده شود که اپلیکیشن pollls نصب شده است. لذا، برای گنجاندن اپلیکیشن در داخل پروژه، باید یک ارجاع به کلاس پیکربندی پروژه در تنظیمات اپلیکیشنهای نصب شده (INSTALLED_APPS) اضافه شود. کلاس PollsConfig در فایل polls/apps.py واقع شده است.
لذا، مسیر نقطهای PollsConfig به صورت 'polls.apps.PollsConfig' است. باید فایل mysite/settings.py را ویرایش کرده و مسیر نقطهای کلاس PollsConfig به تنظیمات INSTALLED_APPS اضافه شود. در ادامه، این کار انجام شده است.
حالا، جنگو میداند که باید اپلیکیشن polls را دربر داشته باشد. در ادامه، باید جنگو را از تغییرات در مدلها آگاه ساخت.
خروجی دستور بالا باید چیزی شبیه به این باشد:
Migrations for 'polls': polls/migrations/0001_initial.py - Create model Question - Create model Choice
با اجرای makemigrations در دستور بالا، جنگو از تغییرات انجام شده در مدلها مطلع میشود (در این مورد، دو مدل جدید ایجاد شد). همچنین، به جنگو اعلام میشود که تغییرات باید به عنوان یک جابهجایی (Migration) ذخیره شوند. جابهجایی، شیوه ذخیره تغییرات مدلها (و در نتیجه تغییرات الگو پایگاهداده) در جنگو است.
جابهجاییها به صورت فایلهای روی دیسک هستند. دستوری برای اجرای جابهجاییها و مدیریت خودکار طرحواره پایگاهداده با نام migrate وجود دارد. دستور sqlmigrate اسامی جابهجاییها را میگیرد و دستور SQL آنها را برمیگرداند. این دستور به صورت زیر است:
با اجرای دستور بالا، باید چیزی شبیه به این در خروجی دیده شود. کدهای خروجی زیر برای خوانایی بیشتر قالببندی مجدد شدهاند.
BEGIN; -- -- Create model Question -- CREATE TABLE "polls_question" ( "id" serial NOT NULL PRIMARY KEY, "question_text" varchar(200) NOT NULL, "pub_date" timestamp with time zone NOT NULL ); -- -- Create model Choice -- CREATE TABLE "polls_choice" ( "id" serial NOT NULL PRIMARY KEY, "choice_text" varchar(200) NOT NULL, "votes" integer NOT NULL, "question_id" integer NOT NULL ); ALTER TABLE "polls_choice" ADD CONSTRAINT "polls_choice_question_id_c5b4b260_fk_polls_question_id" FOREIGN KEY ("question_id") REFERENCES "polls_question" ("id") DEFERRABLE INITIALLY DEFERRED; CREATE INDEX "polls_choice_question_id_c5b4b260" ON "polls_choice" ("question_id"); COMMIT;
در خصوص کدهای بالا، توجه به نکات زیر ضرورت دارد:
- خروجی دقیق و عینی، بسته به پایگاهدادهای که استفاده شده، متفاوت است. مثال بالا برای پایگاهداده PostgreSQL تولید شده است.
- اسامی جدولها به وسیله ترکیب نام اپ (polls) با نام مدل با حروف کوچک تولید شدهاند (question و choice).
- کلیدهای اصلی (IDها) به صورت خودکار اضافه شدهاند.
- طبق اصول، جنگو پسوند «id_» را به نام فیلد کلید خارجی اضافه میکند.
- رابطه کلید خارجی به وسیله یک محدودیت FOREIGN KEY مشخص شده است.
اکنون، میتوان دستور migrate را دوباره برای ایجاد آن جدولهای مدل در پایگاهداده اجرا کرد.
دستور migrate همه جابهجاییهایی را که اعمال نشدهاند میگیرد و تغییرات صورت گرفته در مدلها را با الگوی فعلی پایگاهداده منطبق میسازد. جابهجاییها بسیار قدرتمند هستند و امکان تغییر مدلها را در طول زمان و در حین توسعه پروژه، بدون نیاز به پاک کردن پایگاهداده یا جدولها، فراهم میکنند. جابهجاییها متخصص بهروزرسانی پایگاهداده به صورت زنده و بدون از دست دادن دادهها هستند. در ادامه، منابع و فیلم های آموزش جنگو معرفی شدهاند.
جمعبندی
در مطلب «آموزش جنگو (Django) | راهنمای کامل و رایگان جنگو برای شروع»، بسیاری از مباحث و دانستنیهای لازم برای شروع کار و آموزش جنگو پوشش داده شد. در این مطلب، تاریخچهای از جنگو، کاربردهای جنگو، ویژگیهای مثبت آن، معایب django، مسیر یادگیری و پیشنیازهای آموزش جنگو به مخاطب مورد بررسی قرار گرفت.
در ادامه نیز، نحوه نصب و راهاندازی جنگو آموزش داده شد. در پایان، به چگونگی ساخت اولین وباپلیکیشن و برخی از مفاهیم پایه و ابتدایی آموزش جنگو و معرفی فیلمهای آموزش جنگو پرداخته شد.