مقدمه


تاریخچه جنگو


جنگو توسط 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