معرفی جنگو(django) و راه اندازی محیط توسعه جنگو

مقدمه

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

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

جنگو چیست؟

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

در ادامه به بررسی برخی از ویژگی‌های اصلی جنگو می‌پردازیم.

  • کامل
    جنگو از فلسفه "شامل باطری" (batteries included) پیروی می‌کند و تقریبا تمام امکانات مورد نیاز یک توسعه‌دهنده وب را در اختیارش قرار می‌دهد. و به خاطر اینکه تمامی این اجزا بخشی از یک محصول هستند، همه با هم به صورت یک‌پارچه و بدون مشکل کار کرده و از اصول طراحی یکسان پیروی می‌کنند و همچنین مستندات گسترده و به روز دارند.
  • همه کاره
    از جنگو برای ساخت هر نوع وبسایتی می‌توان استفاده کرد. از سیستم‌های مدیریت محتوا و ویکی‌ها گرفته، تا شبکه‌های اجتماعی و سایت‌های خبری. این فریم‌ورک می‌تواند به راحتی با هر فریم‌ورک سمت‌کاربر(client-side) کار کند و می‌تواند محتوا را تقریبا با هر فرمت(از جمله RSS، HTML، XML، JSON و ...) ارائه دهد. جنگو بسیاری از عملکرد‌های مورد نیاز را به صورت پیش‌فرض تأمین می‌کند و شما می‌توانید در صورت نیاز اجزای دیگری را نیز اضافه کنید و از آن‌ها بهره بگیرید.
  • امن
    جنگو با ارائه چارچوبی برای انجام کارهای درست برای حفاظت از وبسایت به توسعه‌دهنگان کمک می‌‌کند از بسیاری از اشتباهات امنیتی رایج جلوگیری کنند. به عنوان مثال جنگو روشی امن برای مدیریت حساب‌های کاربری و رمزهای عبور ارائه می‌کند، از اشتباهات رایج مانند قرار دادن اطلاعات سشن(session) در کوکی‌ها که ناامن هستند جلوگیری می‌کند و در عوض کوکی‌ها فقط حاوی یک کلید هستند و داده‌های واقعی در پایگاه‌داده ذخیره می‌شوند، و همچنین از ذخیره‌ی مستقیم رمزهای عبور به‌ جای هش(hash)رمز عبور جلوگیری می‌کند.
    جنگو به صورت پیشفرض سایت شما را در مواجهه با حملاتی مانند تزریق SQL، اسکریپ‌های بین‌سایتی(cross-site scripting)، جعل درخواست بین‌سایتی(cross-site request forgery) و کلیک‌ربایی(clickjacking) محافظت می‌کند.
  • مقیاس‌پذیر
    در معماری جنگو هر بخش از دیگر بخش‌ها کاملا جدا است و هر بخش به صورت مستقل در صورت نیاز می‌تواند تغییر پیدا کند یا تعویض شود. این جدا بودن به این معناست که هر سطح می‌تواند با افزودن سخت‌افزار مناسب(برای مثال سرورهای کش، سرورهای پایگاه‌داده، یا سرورهای برنامه) برای افزایش ترافیک تنظیم بشود. برخی از پرترافیک‌ترین سایت‌ها مانند Instagram و Disqus با موفقیت توانسته‌اند از جنگو برای برآورده کردن نیازهایشان استفاده کنند.
  • قابل نگهداری
    کد جنگو با استفاده از اصول و الگوهایی که ایجاد کدهای قابل نگهداری و قابل استفاده مجدد را تشویق می‌کند،‌ طراحی و نوشته‌ شده است. به طور خاص، جنگو از اصل خودت را تکرار نکن(DRY) استفاده می‌کند، بنابراین تکرار غیرضروری وجود ندارد و به همین دلیل مقدار کد نوشته شده کاهش می‌یابد. همچنین جنگو توسعه‌دهندگان را به گروه‌بندی عملکردهای مشابه در قالب یک برنامه قابل استفاده مجدد تشویق می‌کند.
  • انتقال‌پذیر
    جنگو به زبان پایتون که روی پلتفرم‌های زیادی اجرا می‌شود، نوشته شده است. این به این معناست که شما به پلتفرم سرور خاصی وابسته نیستید و می‌توانید برنامه‌های خود را روی ورژن‌ها و نوع‌های مختلفی از لینوکس، ویندوز و Mac OS X اجرا کنید. علاوه بر این جنگو توسط بسیاری از ارائه‌دهنگان سرویس میزبانی وب که اغلب مستندها و زیرساخت‌های خاصی برای میزبانی سایت جنگو ارائه می‌دهند،‌ پشتیبانی می‌شود.

کد جنگو چجوریه؟

در یک وبسایت مبتنی بر داده، برنامه وب منتظر درخواست‌های HTTP از مرورگر وب(یا سایر کلاینت‌ها) است. هنگامی که درخواستی دریافت می‌شود، برنامه بر اساس URL و گاهی اطلاعات موجود در داده‌های POST یا GET مسیر مورد نیاز را انتخاب می‌کند. سپس با توجه به مسیر انتخابی، ممکن است اطلاعات را از یک پایگاه داده بخواند یا در آن بنویسد یا کارهای دیگری برای برآورده کردن درخواست انجام بدهد. برنامه پاسخی را به مرورگر وب برمی‌گرداند، و اغلب این پاسخ به صورت یک صفحه پویا HTML، که با قرار دادن داده‌ها در مکان‌های از پیش تعیین شده در قالب HTML تکمیل شده است، نمایش داده می‌شود.

برنامه‌های وب جنگو معمولا کدهایی را که هر یک از این مراحل را انجام می‌دهند،‌ در فایل‌های جداگانه گروه‌بندی می‌کنند:

  • نقش URLها:
    با اینکه پردازش درخواست‌ها از هر URL با استفاده از یک تابع امکان‌پذیر است، نوشتن یک تابع view جداگانه برای مدیریت برای هر منبع، نگه‌داری و توسعه را راحت‌تر می‌کند.جنگو از یک نگاشت‌گر(mapper) URL برای هدایت درخواست‌های HTTP به view مناسب بر اساس URL درخواستی، استفاده می‌کند. این نگاشت‌گر همچنین می‌تواند الگوهای خاصی از رشته‌ها یا ارقام را که در URL ظاهر می‌شوند به عنوان داده به یک تابع view ارسال کند.
  • نقش viewها:
    view یک تابع کنترل‌کننده درخواست است که درخواست‌های HTTP را دریافت می‌کند و پاسخ‌های HTTP را برمی‌گرداند. viewها از طریق مدل‌ها(models) به داده‌های مورد نیاز برای برآورده کردن درخواست‌ها دسترسی دارند و قالب‌بندی پاسخ را به الگوها(templates) واگذار می‌کنند.
  • نقش modelها:
    مدل‌ها اشیائی در پایتون هستند که ساختار داده‌های یک برنامه را تعریف می‌کنند و روش‌هایی برای مدیریت(افزودن،‌ اصلاح و حذف) و دریافت اطلاعات از پایگاه داده را فراهم می‌کنند.
  • نقش templateها:
    الگوها یک فایل متنی هستند که ساختار یک فایل(مثلا یک فایل HTML) را با متغیرهایی که برای نمایش محتوای واقعی استفاده می‌شود، تعریف می‌کنند. یک view می‌تواند به صورت پویا یک صفحه HTML را با استفاده از الگوی HTML ایجاد کند و آن را با داده‌های مدل‌ها پر کند.

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

محیط توسعه جنگو چیست؟

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

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

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

مرحله ۱ - ایجاد محیط مجازی جدید

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

mkdir test_project
cd test_project
pipenv install --python 3.8
pipenv shell



مرحله ۲ - نصب جنگو

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

pipenv install Django==3.2.8

برای تست اینکه آیا به ماژول جنگو دسترسی داریم یا نه،‌ دستور زیر را اجرا می‌کنیم.

python -m django --version

این دستور باید خروجی 3.2.8 را بدهد.

مرحله ۳ - تست نصب

تست بالا نشان می‌دهد که ما موفق شده‌ایم که جنگو را نصب کنیم یا نه،‌ اما روش هیجان‌انگیزتری نیز برای این کار وجود دارد. در این روش ما اسکلت اولیه یک پروژه را می‌سازیم و آن را اجرا می‌کنیم. برای اینکار از ابزار django-admin استفاده می‌کنیم، سپس به پوشه ساخته شده می‌رویم. در این پوشه فایل manage.py که اسکریپت اصلی مدیریت پروژه است را اجرا می‌کنیم.

django-admin startproject mytestsite
cd mytestsite

با استفاده از دستور tree می‌توانیم ساختار پوشه را به صورت گرافیکی نشان دهیم.

حال می‌توانیم وب سرور توسعه را به وسیله manage.py و با دستور runserver اجرا کنیم.

python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
October 27, 2021 - 19:54:15
Django version 3.2.8, using settings 'mytestsite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

بعد از این مرحله، می‌توانیم با استفاده از URL داده شده(http://127.0.0.1:8000) صفحه اولیه جنگو را درون مرورگر خود باز کنیم.

صفحه اولیه چیزی شبیه به تصویر زیر خواهد بود:


جمع‌بندی

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


مطلب بالا بر اساس ترجمه‌ی آزاد از django introduction و setting up a django development environment و django at a glance همراه با تغییراتی در برخی از بخش‌هاست.