
آموزش جنگو مقدماتی از صفر به زبان ساده
در این مقاله از آموزش جنگو، از پایه شروع کرده و به همراه مثالهای کاربردی و ویدیو آموزشی تا سطح پیشرفته ادامه میدهیم.
شما میتوانید سرفصل مدنظر خود برای یادگیری را از فهرست محتوای این مقاله انتخاب کنید تا به قسمت مربوطه هدایت شوید.
پیش از شروع،
پس، دست به کار شوید! فقط این آموزش را نخوانید! بیایید با هم انجامش دهیم! با انجام دادن و تمرین خیلی بیشتر یاد میگیرید.
چرا جنگو؟
جنگو (Django) یک فریمورک تحت وب است که به زبان پایتون (Python) نوشته شده است. یک وب فریمورک، نرمافزاری است که میتوانیم با آن سایت، اپلیکیشن و سرویسهای تحت وب بسازیم. این نرمافزار مجموعهای از ابزار و قابلیتها را در اختیارمان قرار میدهد تا با آنها بسیاری از مسائل رایجِ توسعهی تحت وب را حل کنیم، مثل قابلیتهای امنیت، دسترسی به پایگاه داده، Sessionها، پردازش Template، روتینگ URL، Internationalization، Localization و غیره.
با استفاده از یک فریمورک تحت وب، مثل جنگو، میتوانیم به سرعت اپلیکیشنهای تحت وبِ امن و قابل اطمینان را به صورت استاندارد بنویسیم. دیگر لازم نیست خودمان دوباره چرخ را اختراع کنیم!
اما چه چیزی جنگو را خاص میکند؟ اولین نکته اینکه یک فریمورک تحت وب پایتونی است، که به شما این امکان را میدهد از مجموعهای بزرگ از کتابخانههای متنباز استفاده کنید. در ریپازیتوری Python Package Index میتوانید بیش از 116 هزار پکیج پیدا کنید. پس اگر لازم باشد مسئلهای خاص را حل کنید، به احتمال زیاد کسی قبلاً کتابخانهای برایش ساخته است.

جنگو یکی از معروفترین فریمورکهای تحت وبِ نوشتهشده به زبان پایتون است. مطمئناً با مجموعهای وسیع، از قابلیتهای آمادهی استفادهای که دارد، کاملترین فریمورک پایتون نیز هست. قابلیتهایی مثل وب سرور Standalone برای توسعه و تست، کش کردن (Caching)، سیستم Middleware، ORM، موتور قالب (Template Engin)، پردازش فرم (Form Processing) و واسطی دارای ابزارهای Unit Testing پایتون.
جنگو به صورت Battery Included عرضه شده است. یعنی دارای اپلیکیشنهای توکاری مثل سیستم احراز هویت (Authentication)، واسط ادمین برای ساخت خودکار صفحاتی برای عملیاتهای GRUD، ساخت فیدهای Syndication (RSS/Atom) و سایتمپ (Sitemap) است. جنگو حتی دارای یک فریمورک توکارِ سیستم اطلاعات جغرافیایی (Geographic Information System) (GIS) نیز است.
Django Software Foundation از تولید جنگو پشتیبانی میکند. جنگو از شرکتهایی مثل JetBrains و Instagram حایت مالی دریافت میکند. تقریباً زمان زیادی از انتشار جنگو میگذرد. بیش از 12 سال است که تحتِ تولیدِ فعال است و این مدت زمانِ نسبتاً طولانی، نشاندهندهی فریمورکی کامل، قابل اطمینان و امن است.
چه کسانی از جنگو استفاده میکنند؟
برای اینکه بدانید میخواهید با جنگو چهکار کنید، خوب است بدانید که چه کسانی از آن استفاده میکنند. اینها مثالهایی از سایتهایی مهمند که از جنگو استفاده میکنند: Instagram، Disqus، Mozilla، Bitbucket، National Geographic وLast.fm.
برای دیدن مثالهای بیشتر به پایگاهدادهی Django Sites سری بزنید. لیستی شامل بیش از 5 هزار سایت را در آن میبینید که از جنگو استفاده کردهاند.
سال گذشته در کنفرانس Django Under The Hood 2016، Carl Meyer، برنامهنویس Core جنگو و کارمند اینستاگرام، دربارهی جنگو صحبت کرد. او توضیح داد که چطور اینستاگرام از جنگو در مقیاسی بزرگ استفاده میکند و جنگو موجب رشد آنها شده است. صحبتهایش یک ساعتی طول کشید، و اگر مشتاق یادگیری هستید، موضوعات آموزندهی بسیاری میشنوید.
دورههای مرتبط در فرانش
آموزش نصب جنگو
اولین گام این است که برنامههایی را در سیستممان نصب کنیم تا بتوانیم از جنگو استفاده کنیم. در ابتدا باید Python، Virtualenv و Django را نصب کنیم.
Python: اول باید پایتون را نصب کنیم.
Virtualenv: بعد از آن باید Virtual Environments را نصب کنیم، تا بتوانیم پروژههای پایتون و جنگو را ایزوله کنیم.
Django: بعد از آن جنگو را درون یک محیط مجازی (Virtual Environment) نصب میکنیم. اینطور میتوانیم پروژهمان را ایزوله کنیم.
استفاده از محیطهای مجازی اجباری نیست، اما بهشدت توصیه میشوند. اگر تازه شروع به کار میکنید، بهتر است که گامهای اولیه را درست بردارید.
وقتی قصد تولید سایتها و پروژههای تحت وب را با استفاده از جنگو دارید، بسیار رایج است که کتابخانههای خارجی را نصب کنید تا در توسعهی آنها بهتان کمک کنند. با استفاده از محیطهای مجازی، هر پروژهای که میسازید دارای محیط ایزولهی خاص خود است. در این صورت Dependencyها با هم برخورد ندارند. همچنین میتوانید در پروژههای ماشین محلی خود باقی بمانید که روی نسخههای مختلف جنگو اجرا میشوند.
استفاده از آن بسیار ساده است. خودتان میبینید!

نصب Python 3.7.4
اولین کار نصب آخرین نسخهی پایتون است. این نسخه در حال حاضر (اکتبر 2019) Python 3.7.4 است. اگر زمانی که میخواهید آن را نصب کنید، نسخهی جدیدتری موجود بود، از آن استفاده کنید.
دلیل اینکه از پایتون 3 استفاده میکنیم، این است که بیشتر کتابخانههای مهم پایتون به پایتون 3 انتقال یافتهاند. علاوه بر آن، نسخهی Django 2.x از پایتون 2 پشتیبانی نمیکند. بنابراین استفاده از پایتون 3 بهتر است.
به www.python.org بروید و وارد صفحهی دانلود Python 3.7.4 شوید. Scroll کنید تا فایلهای دانلود را ببینید:
با توجه به نسخهی ویندوز (اگر ویندوز دارید)، نسخهی مناسب را انتخاب کنید. اگر نمیدانید چه نسخهای مناسب شماست، احتمالاً بهتر باشد Windows x86-64 executable installer را دانلود کنید.
به پوشهی Downloads بروید، روی فایل Installer راست کلید و Run as administrator را انتخاب کنید.
حتماً گزینهی Add Python 3.6 to PATH را انتخاب و سپس روی Install Now کلیک کنید.
پس از اتمام نصب، باید شکل زیر را ببینید:
حالا برنامهی Command Prompt را جستوجو و باز کنید:
برای اینکه مطمئن شویم همهچیز به درستی کار میکند، دستور زیر را تایپ کنید:
python --version
کد زیر را در خروجی میبینید:
Python 3.6.2
عالی است! پایتون آمادهی استفاده و اجراست. گام بعدی: Virtual Environments!
نصب Virtualenv
در گام بعدی، میخواهیم از pip برای نصب Virtualenv استفاده کنیم. pip ابزاری برای مدیریت و نصب پکیجهای پایتون است.
دستور زیر را در Command Prompt اجرا کنید:
pip install virtualenv
تاکنون تمام نصبها در کل سیستم صورت میگرفت. از اینجا به بعد، هرچیزی که نصب میکنیم (حتی جنگو)، در یک محیط مجازی (Virtual Environment) نصب خواهد شد.
اینطور به آن نگاه کنید: برای هر پروژهی جنگویی که میسازید، ابتدا باید یک Virtual Environment برایش درست کنید. انگار برای هر پروژهی جنگو یک Sandbox داشته باشیم. اینطور میتوانید بدون خرابکاری، چیزهای مختلف را امتحان و پکیجهایی را نصب و حذف کنید.
اول یک پوشه برای پروژهمان میسازیم. چون این اولین پروژه و فقط به منظور تست است، لازم نیست نامی خاص برایش انتخاب کنیم. نامش را myproject میگذاریم.
mkdir myproject cd myproject
این پوشه در بالاترین سطح قرار دارد و همهی فایلهای مربوط به پروژهی جنگو (مثل محیط مجازی مربوط به این پروژه) در این پوشه قرار میگیرند.
در گام بعد اولین Virtual Environment خودمان را میسازیم و جنگو را در آن نصب میکنیم.

در پوشهی myproject:
virtualenv venv
Virtual Environment ساخته شد. حالا قبل از استفاده از آن، باید فعالش کنیم:
venv\Scripts\activate
اگر مثل شکل زیر در ابتدای دستورات (venv) را ببینید، یعنی همهچیز به خوبی کار میکند:
بیایید با هم کمی دربارهی شکل بالا صحبت کنیم. ما پوشهای خاص با نام venv ساختیم. این پوشه حاوی یک کپی از پایتون است. بعد از فعالسازی محیط venv، وقتی دستور python را اجرا میکنیم، سیستم از کپی محلی موجود در پوشهی venv استفاده میکند، نه پایتونی را که کمی قبلتر نصب کردیم.
مورد مهم دیگر این است که برنامهی pip از قبل روی سیستم نصب شده است. پس وقتی از آن برای نصب یک پکیج پایتون استفاده میکنیم (مثل جنگو)، این برنامه آن را در محیط venv نصب میکند.
با کد زیر میتوانید محیط venv را غیرفعال کنید:
venv\Scripts\deactivate.bat
اما لازم است که آن را برای گام بعدی هم فعال نگه داریم.
نصب Django 1.11.4
بسیار ساده است. حالا که venv را فعال کردهایم، برای نصب جنگو کد زیر را اجرا کنید:
pip install django
حالا آمادهی کاریم!
همین بود! حالا آمادهی کاریم. گام بعدی این است که اولین پروژهی جنگومان را شروع کنیم! بیایید چیزی بسازیم!
دورههای مرتبط در فرانش
یک پروژه جدید بسازید
برای ساخت یک پروژهی جنگو، دستور زیر را اجرا کنید:
django-admin startproject myproject
واسط دستوری django-admin به صورت خودکار با جنگو نصب میشود.
پس از اجرای دستور بالا، ساختار دایرکتوری اولیهی یک پروژهی جنگو ساخته میشود.
در حال حاضر، پوشهی myproject به شکل زیر است:
myproject/ <-- higher level folder |-- myproject/ <-- django project folder | |-- myproject/ | | |-- __init__.py | | |-- settings.py | | |-- urls.py | | |-- wsgi.py | +-- manage.py +-- venv/ <-- virtual environment folder
ساختار اولیهی پروژه از 5 فایل تشکیل شده است:
- py: یک Shourtcut برای واسط دستوری django-admin است. میتوانیم از آن برای اجرای دستوراتِ مدیریتی مربوط به پروژه استفاده کنیم. از آن برای اجرای سرور، تست، ساخت Migration و بسیاری دیگر استفاده میکنیم.
- py: این فایل خالی به پایتون میگوید که این پوشه یک پکیج پایتون است.
- py: این فایل حاوی تمامی کانفیگریشنهای پروژه است. بسیار به این فایل ارجاع میدهیم!
- py: این فایل مسئول Map کردن روتها و مسیرهای پروژه است. برای مثال، اگر بخواهیم چیزی را در URL /about/ نمایش دهیم، باید آن را اول در این فایل Map کنیم.
- py: این فایل یک واسط دروازهی (Gateway Interface) ساده برای توسعه است. فعلاً نگرانش نباشید و آن را به حال خود رها کنید.
یک وب سرور ساده در جنگو نصب شده است. این سرور مناسب است و لازم نیست در حین فرایند توسعه سرور دیگری را برای اجرای محلی پروژه نصب کنیم. میتوانیم آن را با اجرای کد زیر تست کنیم:
python manage.py runserver
فعلاً میتوانید خطاهای Migration را نادیده بگیرید. بعداً به آنها میپردازیم.
URL زیر را در مرورگرتان باز کنید. باید شکل زیر برایتان نمایش داده شود:
URL: http://127.0.0.1:8000
برای متوقف کردن سرور، CTRL+BREAK را بزنید.

Appهای جنگو
در فلسفهی جنگو، دو مفهوم مهم داریم:
- app: یک اپلیکیشن تحت وب است که کاری انجام میدهد. یک app معمولاً از مجموعهی Modelها (جدولهای پایگاه داده)، Viewها، Templateها و Testها تشکیل شده است.
- project: مجموعهای از appها و کانفیگریشنهاست. یک پروژه میتواند حاوی یک یا چند app باشد.
باید درنظر داشته باشید که بدون project نمیتوانید یک app جنگو را اجرا کنید. وبسایتهایی ساده مثل بلاگ را میتوانید در یک app بنویسید و آن را blog یا weblog بنامید.
جنگو مفهومی به نام App دارد. ایدهی اصلی این است که یک project را به چندین ماژول (یا app) تقسیم کنیم. در تصویر، مربع سبز یک project جنگو است. دایرههای زرد appهای داخلی و دایرههای قرمزappهای خارجی را نشان میدهند که با استفاده از pip نصب شدهاند.
این روشی برای سازماندهی سورسکد (Source Code) است. در ابتدا خیلی بدیهی نیست که چه چیزی App است و چه چیزی نیست. چطور کد را سازماندهی کنیم و …. اما فعلاً نگران این مسائل نباشید.! بیایید فعلاً دربارهی API جنگو و مسائل پایه بیشتر یاد بگیریم.
خب! بیایید یک Web Forum یا Discussion Board ساده بسازیم. برای ساخت اولین appمان، به پوشهای که فایل manage.py در آن قرار دارد بروید و دستور زیر را اجرا کنید:
django-admin startapp boards
دقت کنید که این بار از دستور startapp استفاده کردیم.
این دستور ساختار دایرکتوری زیر را به ما نشان میدهد:
myproject/ |-- myproject/ | |-- boards/ <-- our new django app! | | |-- migrations/ | | | +-- __init__.py | | |-- __init__.py | | |-- admin.py | | |-- apps.py | | |-- models.py | | |-- tests.py | | +-- views.py | |-- myproject/ | | |-- __init__.py | | |-- settings.py | | |-- urls.py | | |-- wsgi.py | +-- manage.py +-- venv/
خب، بیایید اول ببینیم که هر فایل چه کاری انجام میدهد:
- migrations/: جنگو در این پوشه فایلهایی میسازد تا تغییراتی را، که در فایل py اعمال میکنید، پیگیری کند. اینطور پایگاه داده و فایل models.py هماهنگ باقی میمانند.
- py: یک فایل کانفیگریشن برای app توکار جنگو به نام Django Admin است.
- py: فایل کانفیگریشن خود app است.
- py: در اینجا موجودیتهای اپلیکیشن وبمان را تعریف میکنیم. جنگو به صورت خودکار Modelها را به جداول پایگاه داده مدل میکند.
- py: از این فایل برای نوشتن تستهای Unit برای app استفاده میشود.
- py: این فایلی است که در آن چرخهی درخواست/پاسخ را در اپلیکیشن تحت وب مدیریت میکنیم.
دقت کنید که اولین appمان را ساختیم. حالا میخواهیم اولین project را برای استفاده از App کانفیگر کنیم.
برای این کار، settings.py را باز و متغیر INSTALLED_APPS را پیدا کنید:
settings.py
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ]
همانطور که مشاهده میکنید، جنگو از قبل 6 app توکار نصبشده دارد. این appها قابلیتهایی را ارائه میکنند، که بیشتر اپلیکیشنهای تحت وب به آن نیاز دارند. مثل احراز هویت، Sessionها، مدیریت فایلهای استاتیک (تصاویر، فایلهای جاوا اسکریپت، CSS و … ) و امثال اینها.
کاری به این appها نداشته باشید و فقط app خودمان (boards) را به لیست INSTALLED_APPS اضافه کنید:
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'boards', ]
اگر تصویر دایرهها و مربع را به خاطر داشته باشید، boards دایرهی زرد است، django.contrib.admin و django.contrib.auth و … دایرههای قرمز هستند.

Hello, World!
بیایید اولین view را بنویسیم. میخواهیم ببینیم که ساخت یک صفحهی جدید در جنگو چگونه است.
فایل views.py موجود در boards را باز کنید و کد زیر را به آن اضافه کنید:
views.py
from django.http import HttpResponse def home(request): return HttpResponse('Hello, World!')
Viewها توابعی در پایتون هستند که یک شئ HttpRequest را میگیرند و یک شئ HttpResponse را برمیگردانند. یک request را به عنوان پارامتر ورودی میگیرند و یک response را به عنوان خروجی برمیگردانند. این جریانی است که باید به خاطر داشته بسپارید!
در اینجا یک View ساده به نام Home ساختیم که یک پیغام Hello, World! را برمیگرداند.
حالا باید به جنگو بگوییم که کِی این View را نمایش دهد. باید در فایل urls.py این کار را انجام دهیم:
urls.py
from django.conf.urls import url from django.contrib import admin from boards import views urlpatterns = [ url(r'^$', views.home, name='home'), url(r'^admin/', admin.site.urls), ]
اگر کد بالا را با فایل urls.py قبلی مقایسه کنید، میبینید که کد زیر به آن اضافه شده است:
و با استفاده از from boards import views ماژول Views را به داخل boards ایمپورت کردهایم.
جنگو برای مچ کردن URL درخواستی از regex استفاده میکند. برای Home View، از ^$ استفاده کردیم، که آن را با یک مسیر خالی مچ میکند، که آن مسیر Homepage است (url: http://127.0.0.1:8000). اگر میخواستیم با URL http://127.0.0.1:8000/homepage/ مچ شود، کد زیر نتیجهی آن میشد:
url(r'^homepage/$', views.home, name='home')
بیایید نتیجه را ببینیم:
python manage.py runserver
در مرورگر آدرس http://127.0.0.1:8000 را باز کنید:
همین بود! اولین View خودتان را ساختید.
نتیجهگیری
در این آموزش یاد گرفتیم که چگونه آخرین نسخهی پایتون را نصب و محیط مجازی را راهاندازی کنیم. بعد از آن کمی دربارهی محیطهای مجازی حرف زدیم، اولین Project جنگو را ایجاد کردیم و App اولیهمان را ساختیم.
فیلم آموزش جنگو Django
در صورتی که آموزش جنگو برای شما مفید بوده است:
برای یادگیری بیشتر پیشنهاد میکنیم دوره های آنلاین آموزش جنگو فرانش را مشاهده نمایید.
دورههای مرتبط در فرانش
عالی و دقیق و بی نقص بود دوستان در جواب ینا جان باید بگم شما django-admin startapp boards رو یادت رفته و البته باید بری به users\username\desktop\myproject و در اون باید سه پوشه باشه به نام های myproject و boards و myproject و مشکل لود نشدن صفحه مربوط به مشکل کد هایی هستش که توی پوشه boards وارد کرده اید باید بعد از وارد کردن کد python manage.py runserver خط اخر بنویسه quit the server with ctrl-break
مرسی از آموزشه خوبتون من همشو راحت متوجه شدم و اوکی بود جز این چنتا کده آخر و باز کردنه اون لینکه http://127.0.0.1:8000
نمیدونم مشکل کجاست صفه باز نمیشه
سلام سلام من در قسمت اموزش جنگو در بخش یک پروزه جدید بسازید کد django-admin startproject myproject را وارد کردم ولی در گام بعدی در حال حاضر پوشه my projectm به اون شکلی نیست که در سایت فرانش گفته باید باشه تا من بتونم قدم بعدی رو مطابق سایت برم جلو و py هارو نشون نمیده بلکه فقط میره خط بعد لطفا راهنمایی کنید pip رو هم اپدیت کردم همه مراحلم مطابق اموزش های سایت جلو رفتم
سلام من وقتی
from django.conf.urls import url
from django.contrib import admin
from boards import views
]
این کد رو وارد میکنم ارورمیده ماژولی به نام boards وجود ندارد الان من باید چیکار کنم؟؟
بسم الله الرحمن الرحیم
الحمد لله
شکرا جزیلا
سلام خدا قوت مطلبتون عالی بود
فقط عکس ها درست لود نمیشن
گفتم اطلاع بدم
سلام علی جان
ممنون از شما