تاریخچه جنگو
جنگو توسط Lawrence Journal-World در سال 2003 مطرح شد تا فرصت زمانی کوتاه روزنامه را برای انتشار هرچه سریعتر خبرها را پوشش داده و در عین حال خواسته های توسعهدهندگان وب با تجربه را نیز برآورده کند. انتشار اولیه جنگو برای عموم در تاریخ جولای 2005 اتفاق افتاد. در زمان نگارش این آموزش – سپتامبر 2025 – آخرین نسخه عرضه شده جنگو، نسخه 5.2.6 است.
ماهیت جنگو
جنگو، فریمورک ویا همان چارجوبی میباشد که ایجاد یک وبسایت را با استفاده از بستر پایتون آسانتر میکند. همچنین جنگو بر قابلیت استفاده مجدد از مؤلفهها، تأکید دارد که در اصطلاح به آن DRY گفته میشود که مخفف اصطلاح خودت تکرار نکن - Don't Repeat Yourself – میباشد و دارای ویژگیهای آماده برای استفاده همانند سیستم احراز هویت و اعتبارسنجی کاربران، اتصال پایگاه داده و عملیات CRUD معرف عملیات ایجاد، خواندن، ویرایش و حذف (Create Read Update Delete) و ... است.
همچنین جنگو از الگوی طراحی MVT (Model-View-Template) پیروی میکند که جداسازی واضحی بین مدلهای داده (لایه داده Model)، نماها (لایه منطقView ) و قالبها (لایه ارائه Template) ایجاد میکند.
در ادامه، شرح مفصلی برای هر یک خواهد رفت ولی در اینجا، میتوان تعاریف کوتاهی برای هر بخش ارائه نمود:
◄ مدلها (Model)
به عنوان لایه داده یاد میشود، پایگاه داده و یا به عبارتی، مجموعه دادههایی از یک پایگاه داده را شامل میشود.
◄ نماها (View)
کنترل کننده و مدیریت درخواستها برای نمایش محتوای دادهها در تمپلیتهای هدف در آدرس URL مورد درخواست کاربر میباشند که به درستی به آن لایه منطق گفته میشود.
◄ تمپلیتها(Template)
فایلهای حاوی طرحبندی صفحات وب HTML همراه با فایل استایلدهی CSS، با منطق نحوه نمایش دادهها JavaScript را شامل میشوند که از آن با عنوانهای لایه ارائه، رابط کاربری و یا Frontend نیز یاد میشود.
از مهمترین مزیتهای جنگو برای ایجاد یک وبسایت، فراهم آوردن یک چارچوب وب قدرتمند برای توسعه سمت سرور – Backend – و رابط کاربری – FrontEnd – به صورت همزمان میباشد. جداسازی MVT به توسعهدهندگان اجازه میدهد به طور همزمان بر روی جنبههای مختلف برنامه کار کنند. توسعهدهندگان قسمت Frontend میتوانند با استفاده از کدهای HTML، CSS و JavaScript واسط کاربری پاسخگو و تعاملی را طراحی کنند، در حالی که توسعهدهندگان سمت سرور یا Backend، منطق و تغییر دادهها را مدیریت میکنند.
در مبحث امنیت نیز جنگو چندین معیار امنیتی را به طور پیشفرض در بر میگیرد، محافظت در برابر آسیبپذیریهای رایج وب از جمله اسکریپت بین سایتی (XSS)، جعل درخواست بین سایتی (CSRF) و تزریق SQL. همچنین یک سیستم احراز هویت قوی نیز با پشتیبانی از مدیریت کاربر، مجوزها و مدیریت session ارائه میدهد. این ویژگیها کمک میکنند تا اطمینان حاصل شود که پروژه هم در قسمت Frontend و هم در Backend ایمن باقی بماند و دادههای کاربر محافظت شوند در عین حالی که یکپارچگی کلی سیستم نیز حفظ گردد.
Models
مدلها، دادهها را در پایگاه داده تعریف، ذخیره و ارائه میدهند.
در جنگو، دادهها بهعنوان یک ORM (Object Relational Mapping) ارائه میشوند، که تکنیکی طراحی شده برای آسانتر کردن کار با پایگاههای داده است.
رایج ترین راه برای استخراج دادهها از پایگاه داده، SQL Query است. یکی از مشکلات SQL این است که باید درک بسیار خوبی از ساختار پایگاه داده وجود داشته باشد تا بتوان با آن کار کرد.
جنگو با ORM، بدون نیاز به نوشتن دستورات SQL پیچیده، ارتباط با پایگاه داده را بسیار آسان تر میکند.
❗❗❗ مدلها معمولا در فایلی به نام models.py قرار میگیرند.
Views
نماها شامل فانکشنها و یا متدهایی میباشند که درخواستهای HTTP را دریافت کرده، مدل(های) مربوطه را در صورت نیاز وارد نموده و تعیین میکنند چه دادههایی از مدلها به چه تمپلیتی جهت ارائه در لایه رابط کاربری ارسال گردد، تا نتیجه نهایی برای کاربر به نمایش درآید.
❗❗❗ Viewها معمولاً در فایلی به نام views.py تعریف میگردند.
Templates
تمپلیتها، فایلهایی میباشند که نحوه نمایش نتیجه را ترسیم میکنند. تمپلیتها اغلب فایلهایی html با کدهای HTML هستند که طرحبندی یک صفحه وب را توصیف میکنند، اما میتوانند همراه با کدهای استایلدهی CSSو کدهای منطق JavaScript نیز تعریف شوند تا نتایج بهتری را در رابط کاربری در نحوه نمایش دادهها ارائه دهند.
❗❗❗ جنگو از HTML استاندارد برای توصیف طرحبندی استفاده میکند، اما از تگهای جنگو نیز برای اضافه کردن منطق استفاده میکند.
URLs
جنگو همچنین راهی برای پیمایش در صفحات مختلف یک وبسایت فراهم میکند. وقتی کاربر یک URL را درخواست میکند، جنگو تصمیم میگیرد که آن را به کدام view ارسال کند. این فرایند نیز در فایلی به نام urls.py تعریف میگردد.
ماهیت کار
پس از نصب جنگو و ایجاد اولین پروژه وب جنگو. زمانی که کاربر توسط مرورگر یک URL مربوط به پروژه را درخواست میکند، بصورت ساختاری، فرایند زیر اجرایی میگردد:
❶ جنگو درخواست URL را دریافت و فایل urls.py
را بررسی کرده تا فانکشن view منطبق با URL درخواستی را فراخوانی کند.
❷ تابع view که در فایل views.py
قرار گرفته است modelهای مربوط به درخواست برا ارائه دادهها را وارد میدان میکند.
❸ مدلهای فراخوانی شده از فایل models.py
، دادهها را عرضه میکنند.
❹ دادههای بدست آمده در ادامه توسط فانکشن view، به تمپلیت مشخص و تعریف شده در دایرکتوری template ارسال میگردند.
❺ تمپلیت حاوی کدهای HTML ، CSS و همچنین تگهای جنگو، محتوای نهایی را همراه با تعریف نحوه نمایش دادهها در رابط کاربری، به مرورگر برمیگرداند.
نصب جنگو
ابتدا جهت اطمینان از نصب بودن پایتون، دستور کد ذیل را در محیط ترمینال اجرا میکنیم
python --version
در خروجی میبایست مشخصات نسخه نصب شده بر روی سیستم نمایش داده شود. در صورتی که پایتون بر روی سیستم نصب نباشد، میبایست از طریق سایت رسمی پایتون، اقدام به دانلود و نصب آن نمود.
Python 3.10.0
برای نصب جنگو، بهترین راه استفاده از یک package manager مانند PIP
است که یک ابزار نصبکنندهی بسته برای پایتون و مخفف عبارت "Pip Installs Packages" میباشد و برای نصب و مدیریت بستههای نرمافزاری نوشته شده بر بستر پایتون استفاده میگردد. از نسخه 3.4 در پایتون به صورت پیشفرض موجود است. برای اطمینان از نصب بودن PIP
در سیستم، از دستور زیر میتوان استفاده کرد:
pip --version
اگر نسخهای از PIP
بر روی سیستم وجود داشته باشد، شماره نسخه نصب شده آن نمایش داده خواهد شد.
pip 23.0
پیشنهاد میشود برای جلوگیری از اختلال پروژهها، برای هر پروژه جنگو، یک فضای اختصاصی (Virtual Environment) جداگانهای، اختصاص گردد، چرا که هر پروژه ممکن است به نسخههای مختلفی از کتابخانهها مانند جنگو یا سایر ابزارها نیاز داشته باشد؛ اگر تمام پروژهها روی یک محیط مشترک نصب شوند، تضاد نسخهها باعث خطا، عدم سازگاری یا حتی قفل شدن پروژهها میشود، در حالی که با استفاده از venv
، هر پروژه، کتابخانههای اختصاصی و مستقل خود را خواهد داشت و سیستم اصلی پاک و سالم میماند. همچنین توسعه، تست و انتقال پروژه به سایر دستگاهها یا تیمها به راحتی و بدون خطای تداخلی انجام میشود — این رویکرد نه تنها استاندارد صنعتی است، بلکه از بسیاری از مشکلات زمانبر و پیچیده در توسعه نرمافزار جلوگیری میکند. یکی از راههای مدیریت فضای اختصاصی، venv
است که در پایتون گنجانده شده است.
نام فضای اختصاصی، اختیاری و به انتخاب کاربر بستگی داشته و میتواند هر نام دلخواهی باشد، در این آموزش از نامگذاری venv بهره برده خواهد شد که یک نام استاندارد و همچنین پرکاربرد در میان جامعه برنامهنویسان میباشد.
برای ایجاد یک فضای اختصاصی، میبایست یکی از دستورات زیر را در ترمینال دایرکتوری پروژه اجرا کرد.
virtualenv venv
python3 -m venv venv
❗❗❗ دایرکتوری پروژه، دایرکتوری خواهد بود که هر دو دایرکتوری فضای اختصاصی پروژه - venv
- و دایرکتوری جنگوی پروژه را شامل میگردد. برای راحتی کار پیشنهاد میگردد دایرکتوری پروژه را با عنوان Projectname-Project تعریف کرد و عنوان Projectname-Django را برای دایرکتوری جنگوی پروژه اختصاص داد. در نهایت Projectname با عنوان هر پروژهای که بر روی آن کار خواهیم نمود، جایگزین خواهد شد.
└───Tutorial-Project
├───Tutorial-Django
└───venv
پس از ایجاد فضای اختصاصی پروژه، میبایست آن را فعال نمود: در سیستم عامل ویندوز این امر توسط دستور کدی زیر صورت میپذیرد:
venv\Scripts\activate
و برای سیستم عامل لینوکس:
source venv/bin/activate
باید توجه داشت که بعد از فعال نمودن فضای اختصاصی پروژه، باید محیط ترمینال با نام (venv)
و یا هر نامی که هنگام ساختن فضای اختصاصی تعریف نمودیم، آغاز گردد.
حال میبایست نسبت به نصب جنگو در محیط اختصاصی پروژه اقدام گردد.
(venv) pip install Django
با اجرای کد دستوری زیر، میتوان تمامی پکیجهای محیط اختصاصی venv
، همراه با نسخههای نصب شده از آنها را لیست کرد:
(venv) pip list
Package Version
----------------- -------
asgiref 3.9.1
Django 5.2.6
pip 22.2.2
setuptools 63.2.0
sqlparse 0.5.3
typing_extensions 4.15.0
tzdata 2025.2
❗❗❗ جنگو به همراه خود پکیجهای tzdata, typing_extensions, sqlparse, asgiref را نیز به عنوان پیشنیاز درستی اجرای کار خود، نصب میکند.
پس از اطمینان از نصب جنگو، دستور کدی زیر، لیست دستوراتی که در جنگو به آنها دسترسی خواهیم داشت را نمایش میدهد:
(venv) django-admin
از مهمترین دستورات جنگو میتوان به موارد زیر اشاره کرد.
⮜ ایجاد پروژه ━ startproject
یک پروژه جنگوی جدید با ساختار اصلی ایجاد میکند.
django-admin startproject projectname
⮜ ایجاد اپ ━ startapp
یک app (ماژول جداگانه مانند blog
, user
) درون پروژه ایجاد میکند.
python manage.py startapp appname
⮜ اجرای پروژه ━ runserver
سرور محلی روی http://127.0.0.1:8000
راهاندازی میشود
python manage.py runserver
در صورت نیاز به اجرای پروژه بر روی پورت اختصاصی
python manage.py runserver 8080
⮜ ایجاد مایگریشنها ━ makemigrations
تغییرات مدلها (Models) را به عنوان فایل مایگریشن ذخیره میکند
python manage.py makemigraions
⮜ اجرای مایگریشنها ━ migrate
مایگریشنها را روی پایگاه داده اجرا میکند (جدولها ایجاد یا تغییر میکند).
python manage.py migrate
⮜ ایجاد کاربر ادمین ━ createsuperuser
کاربر مدیریتی Superuser
برای دسترسی به پنل admin ایجاد میکند.
python manage.py createsuperuser
⮜ جمعآوری فایلها ━ collectstatic
تمام فایلهای CSS, JS, Images را از اپها جمعآوری و در دایرکتوری تعریف شده برای STATIC_ROOT قرار میدهد (برای سرور تولیدی مثل Nginx).
python manage.py collectstatic
⮜ نمایش تنظیمات ━ diffsettings
تفاوت تنظیمات فعلی با مقادیر پیشفرض را نشان میدهد.
python manage.py diffsettings