ماژول های جنگو چیست + ۹ ماژول پرطرفدار و نحوه ساخت هرکدام

ماژول های جنگو چیست + ۹ ماژول پرطرفدار و نحوه ساخت هرکدام

نوشته شده توسط: نگین فاتحی
تاریخ انتشار: ۰۱ شهریور ۱۴۰۳
آخرین بروزرسانی: ۰۱ شهریور ۱۴۰۳
زمان مطالعه: 13 دقیقه
۵
(۲)

ماژول های جنگو برنامه‌های کاربردی و کوچکی هستند که عملکرد و بهره‌وری وب‌سایت را چند برابر می‌کنند. درواقع ماژول های Django برنامه‌های ضمیمه‌ای (Extension) به برنامه اصلی هستند که به یک عملکرد خاص اختصاص داده شده‌اند. در این مقاله، ماژول های جنگو را زیر ذره‌بین قرار داده و عنوان‌هایی مانند جنگو چیست، انواع ماژول‌های جنگو، مزایای استفاده از آن‌ها و غیره را بررسی خواهیم کرد.

جنگو چیست؟ 

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

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

جنگو چگونه کار می‌کند؟

پیش از پاسخ به این سوال، باید چهار جزء جنگو را بشناسیم. 

Django از الگوی طراحی مدل نمای الگو یا MVT (Model View Template) پیروی می‌کند. این مدل برگرفته از تعاریف و اجزا زیر است:

Model

داده‌هایی که ارائه می‌کنید، به‌طور معمول داده‌هایی از یک پایگاه داده هستند. در جنگو، داده‌ها به‌عنوان یک نگاشت شی-رابطه‌ای (Object Relational Mapping) ارائه می‌شوند. ORM تکنیکی برای آسان‌تر کردن کار با پایگاه‌های داده است.

رایج‌ترین راه برای استخراج داده‌ها از پایگاه داده SQL است. یکی از مشکلات SQL این است که شما باید درک بسیار خوبی از ساختار پایگاه داده داشته باشید تا بتوانید با آن کار کنید.

جنگو با تکنیک ORM، بدون نیاز به نوشتن دستورات و کوئری‌های پیچیده SQL، ارتباط با دیتابیس را آسان‌تر می‌کند.

مدل‌ها معمولا در فایلی به‌نام models.py قرار دارند.

View

View یک تابع یا متد است که درخواست‌های http را به‌عنوان آرگومان می‌گیرد. این آرگومان را به مدل یا مدل‌های مربوطه Import می‌کند. پس از Import، مشخص می‌کند که چه داده‌هایی باید به Template ارسال شوند. سپس نتیجه نهایی را برمی‌گرداند.

Viewها به‌طور معمول در فایلی به‌نام views.py قرار دارند.

Template

یک فایل متنی (مانند فایل HTML) حاوی طرح‌بندی صفحه وب، همراه‌با منطق نحوه نمایش داده‌ها. الگو فایلی است که در آن نحوه نمایش نتیجه را توضیح می‌دهید. Templateها اغلب فایل‌های html هستند؛ اما می‌توانند در قالب‌های دیگری هم تعریف شوند تا نتایج متفاوتی ارائه دهند.

جنگو از HTML استاندارد برای توصیف طرح‌بندی استفاده می‌کند؛ اما برای اضافه کردن منطق به فایل، تگ‌های جنگو را به‌کار می‌گیرد که نمونه کد را در کادر زیر می‌توانید ببینید:

 

<h1>My Homepage</h1>
<p>My name is {{ firstname }}.</p>

 

این سه الگو در کنار URL کار می‌کنند تا درخواست کاربر با دقیق‌ترین پاسخ از سمت سرور، به مرورگر بازگردد.

وقتی کلاینت درخواست یک URL را می‌دهد، جنگو تصمیم می‌گیرد که آن را به کدام View ارسال کند. این کار در فایلی به‌نام urls.py انجام می‌شود.

حال می‌توانیم پاسخ دقیق و شفافی به سوال «جنگو چگونه کار می کند» بدهیم:

وقتی جنگو را نصب کردید و اولین وب‌اپلیکیشن را با آن ساختید، با اولین درخواست URL از سمت مرورگر، این فرآیند طی می‌شود:

  1. ابتدا جنگو URL را دریافت و فایل urls.py را بررسی می‌کند. سپس View مطابق‌با URL را فرا می‌خواند؛
  2. View در views.py، مدل‌های مربوطه را بررسی می‌کند؛
  3. مدل‌ها از فایل models.py وارد (Import) می‌شوند؛
  4. سپس View داده‌ها را به یک الگوی مشخص در پوشه template ارسال می‌کند؛
  5. این template حاوی تگ‌های HTML و جنگو است. بنابراین این تگ‌ها را به‌همراه داده‌ها، به‌شکل محتوای نهایی در قالب فایل HTML به مرورگر برمی‌گرداند.

۵ مزیت استفاده از جنگو 

۵ مزیت جنگو را در ادامه لیست کرده‌ایم؛ اما به‌ یاد داشته باشید که این بخش طولانی‌تر است. ما فقط به مهم‌ترین و کاربردی‌ترین مزایای جنگو در این قسمت اشاره کرده‌ایم.

  1. توسعه بسیار سریع

جنگو برای کمک به توسعه‌دهندگان ایجاد شد تا برنامه‌ها را از کانسپت تا تکمیل در سریع‌ترین زمان ممکن انجام دهند. این توسعه سریع مدیون بسیاری از ویژگی‌های داخلی جنگو است که روند توسعه را ساده می‌کنند.

  1. امنیت بالا

جنگو امنیت بالایی را ارائه می‌دهد و به توسعه‌دهندگان کمک می‌کند تا از اشتباهات امنیتی رایج اجتناب کنند. محافظت داخلی در برابر آسیب‌پذیری‌های رایج مانند SQL Injection، Cross-site Scripting، جعل درخواست هنگام تبادل اطلاعات و Clickjacking، تنها بخشی از امکانات امنیتی جنگو هستند.

  1. تطبیق‌ پذیری بهینه

جنگو را می‌توان برای ساخت هر نوع وب‌سایتی استفاده کرد؛ از سیستم‌های مدیریت محتوا و ویکی‌ها گرفته تا شبکه‌های اجتماعی و سایت‌های خبری. این فریم‌ورک از دیگر فریم‌ورک‌های سمت کلاینت پشتیبانی می‌کند. بنابراین می‌تواند محتوا را در قالب‌های مختلف ازجمله HTML، فیدهای RSS، JSON و XML ارائه دهد.

  1. ماژول های Django

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

  1. طراحی وب‌ سایت‌ های مقیاس‌ پذیر

جنگو از یک معماری مبتنی‌بر کامپوننت “Shared-Nothing” استفاده می‌کند. در این معماری، هر بخش از برنامه مستقل از سایر اجزا است. بنابراین می‌توان در صورت نیاز، هر بخش را جایگزین کرده یا تغییر داد. این مزیت جنگو به متخصصان کمک می‌کند تا با افزودن سخت‌افزارهایی مانند سرورهای کش یا Database، ظرفیت ترافیک ورودی وب‌اپلیکیشن یا سایت‌های خود را گسترش دهند.

مفهوم ماژول‌ ها و اپلیکیشن‌ ها در جنگو 

در ادامه به‌شکل خلاصه، ماژول های Django و اپلیکیشن‌های این فریم‌ورک را توضیح خواهیم داد.

ماژول های جنگو

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

این اجزا یک فایل یا مجموعه‌ای از فایل‌ها را دربرمی‌گیرند که Namespace را به‌اشتراک می‌گذارند. بنابراین هر توسعه‌دهنده می‌تواند این فضاها را به برنامه‌های خود وارد کند. 

Namespace راهی برای سازمان‌دهی و گروه‌بندی الگوهای URL است. هدف این قابلیت، جلوگیری از تداخل نام‌گذاری بین برنامه‌های مختلف در یک پروژه است.

اپلیکیشن های جنگو

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

سه ویژگی کلیدی Django Applications را در ادامه مشاهده خواهید کرد.

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

تفاوت ماژول و اپلیکیشن در جنگو

تفاوت ماژول و اپلیکیشن در جنگو را در جدول زیر نشان داده‌ایم.

 

  اپلیکیشن ماژول
ماهیت واحدهای مستقلی از برنامه نهایی که برای یک پروژه با ویژگی‌های خاص به‌کار می‌رود. واحدهای کوچک و همه‌منظوره که با قابلیت‌های مختلف و گسترده خود، امکان استفاده در پروژه‌های گوناگون جنگو را دارند.
تمرکز ترکیبی از Model، View، URL و دیگر بخش‌های خاص برای اجرای پروژه ارائه قابلیت‌های اصلی یا گسترش قابلیت‌های کاربردی جنگو 
مثال

وبلاگ، فروشگاه آنلاین و بخش مدیریت کاربران در پروژه 

فرم‌های ورودی کاربر، تعامل با پایگاه داده، رسیدگی به درخواست‌های سیستم کلاینت

 

انواع ماژول در جنگو

انواع ماژول های جنگو به دو دسته ماژول داخلی و ماژول خارجی تقسیم می‌شوند که در ادامه هرکدام را با جزئیات تشریح می‌کنیم.

ماژول های داخلی جنگو

جنگو یک فریم‌ورک وب و مجموعه‌ای از ماژول‌های پایتون است. این ماژول‌های داخلی (Built-in Modules) عملکردهای اصلی را برای ساخت وب‌اپلیکیشن‌ها محیا می‌کنند. همچنین قادر به ساده‌سازی توسعه این برنامه‌ها هم هستند. 

به‌عنوان مثال، سه ماژول داخلی جنگو که محبوبیت زیادی دارند به شرح زیر هستند:

  1. argparse: ماژولی حاوی ابزارهایی برای ساخت رابط‌های کاربرپسند با استفاده از دستورات متنی command line؛
  2. asyncio: ماژولی گسترده که چارچوب و محیطی را برای برنامه‌نویسی غیرهمزمان ارائه می‌دهد. اگر می‌خواهید کدهای غیرهمزمان، همزمان و تک‌رشته‌ای بنویسید، asyncio ماژول داخلی بسیار مناسبی است. asyncio یک حلقه را راه‌اندازی می‌کند که در آن کد غیرهمزمان در قالب یک وظیفه (Task) اجرا می‌شود. زمانی‌که وظیفه غیرفعال است (مانند انتظار کشیدن برای دریافت پاسخ از سرور) ماژول وظیفه دیگری را اجرا می‌کند؛
  3. CSV: ماژولی برای ارائه قابلیت‌های Import و Export داده‌های جدولی در قالب فایل CSV. این ماژول به توسعه‌دهندگان اجازه می‌دهد تا از یک فایل CSV، متدهای “load data” و “save data” را انجام دهند.

بسته‌ های شخص ثالث جنگو

اکوسیستم جنگو مجموعه وسیعی از ماژول‌های شخص ثالث را میزبانی می‌کند که هرکدام قابلیت‌های این فریم‌ورک را گسترش می‌دهند. این ماژول‌ها را با نام Third-party Django Packages یا «بسته‌های شخص ثالث» می‌شناسیم؛ اما ماهیت و عملکردی مشابه‌با ماژول‌ های Django دارند.

۶ نمونه از ماژول‌ های داخلی جنگو

لیست ماژول‌ های داخلی جنگو را در ادامه مشاهده خواهید کرد.

  1. Models

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

  1. Forms

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

  1. Views

این ماژول‌ های جنگو مسئول رسیدگی به درخواست‌های کاربران و ایجاد پاسخ‌های مناسب هستند. آن‌ها تعیین می‌کنند که وقتی کاربر با یک URL خاص در برنامه تعاملی انجام داد، چه اتفاقی رخ دهد.

  1. Middleware

ماژول‌های میان‌افزار به‌عنوان واسطه بین درخواست دریافتی و پاسخ نهایی عمل می‌کنند. آن‌ها می‌توانند وظایف مختلفی که به مدیریت ارتباط بین اجزا ورودی و خروجی  منتهی می‌شوند را اجرا کنند؛ مانند بررسی‌های امنیتی، مدیریت Sessionها یا ذخیره‌سازی محتوا برای بهبود عملکرد وب‌سایت.

  1. Templates

جنگو از یک سیستم قالب‌سازی برای تولید صفحات HTML پویا استفاده می‌کند. این ماژول‌ها راهی برای ترکیب کدهای HTML از پیش نوشته‌شده با داده‌های برنامه ارائه می‌دهند. بنابراین می‌توان با کمک Template جنگو، صفحات وب را به‌شکل تعاملی ساخت.

  1. URLs

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

۳ نمونه از ماژول های شخص ثالث جنگو

این ماژول‌ها کتاب‌خانه‌های از پیش‌ نوشته‌شده‌ای هستند که توسط Django Community ساخته شده‌اند. البته توسعه‌دهندگان این ماژول‌ها را بسته یا “Package” می‌دانند. در ادامه سه ماژول جانبی جنگو را معرفی خواهیم کرد.

  1. Django REST framework

این بسته محبوب ساخت APIهای RESTful را با جنگو ممکن می‌کند. همچنین ایجاد ساده سرویس‌های وب را در اختیار توسعه‌دهندگان می‌گذارند.

  1. Django Allauth

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

  1. Django Debug Toolbar

این ابزار اشکال‌زدایی (Debugging Tool) بینش‌های ارزشمندی درباره عملکرد برنامه ارائه می‌دهد. بنابراین می‌توان با کمک آن، شناسایی و رفع مشکلات را آسان و ممکن کرد.

ایجاد و پیکربندی ماژول های جنگو

در این بخش، هر شش ماژول پرکاربرد جنگو که در این مقاله نام بردیم را ایجاد و پیکربندی می‌کنیم.

  1. ایجاد و پیکربندی Models

در جنگو، داده‌ها در اشیائی به‌نام “Models” ایجاد می‌شوند. این اشیا جداولی در یک پایگاه داده هستند.

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

برای ایجاد یک مدل، به فایل models.py در پوشه /members/ بروید. حال برای ایجاد جدول، باید یک کلاس با نام “Member” – یا هر نام دیگری – بسازید و فیلدهای جدول را توصیف کنید.

 

from django.db import models
class Member(models.Model):
  firstname = models.CharField(max_length=255)
  lastname = models.CharField(max_length=255)

 

اولین فیلد با نام “firstname”، یک فیلد متنی است که نام کوچک اعضا را نگه می‌دارد.

فیلد دوم، “lastname” هم یک فیلد متنی حاوی نام خانوادگی عضو است.

هر دو فیلد با عدد ۲۵۵ تنظیم شده‌اند؛ یعنی هرکدام می‌توانند حداکثر ۲۵۵ کاراکتر را دریافت کنند.

  1. ایجاد و پیکربندی Forms

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

کد زیر برای ساخت یک فرم استفاده می‌شود:

 

from django import forms
class BandContactForm(forms.Form):
    subject = forms.CharField(max_length=100)
    message = forms.TextField()
    sender = forms.EmailField()
    cc_myself = forms.BooleanField(required=False)

 

  1. ایجاد و پیکر بندی Views

Views توابع پایتون هستند که درخواست‌های http را دریافت کرده و پاسخ http را مانند یک سند HTML برمی‌گردانند.

Views به‌طور معمول در فایلی به‌نام “views.py” قرار می‌گیرند که در پوشه برنامه است. فایل “views.py” هم در پوشه “members” است که برای رسیدن به آن، باید مسیر زیر را طی کنید:

my_tennis_club/members/views.py:

در حالت عادی، محتوای زیر را درون این فایل خواهید دید:

 

from django.shortcuts import render
# Create your views here.

 

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

 

from django.shortcuts import render
from django.http import HttpResponse
def members(request):
    return HttpResponse("Hello world!")

 

نکته: نیازی نیست نام Views با نام اپلیکیشن یکسان باشد. ما آن را members نامیدیم؛ اما هر نام دیگری را می‌توانید انتخاب کنید.

این کد یک مثال ساده از نحوه ارسال پاسخ به مرورگر است. برای اجرای این View باید از ماژول URL استفاده کنیم که در بخش بعد، نحوه ایجاد آن را نشان داده‌ایم.

  1. ایجاد و پیکربندی URL

یک فایل به‌نام “urls.py” در همان پوشه‌ای که فایل “views.py” را ایجاد کردید، بسازید و کد پایین را درون آن تایپ کنید:

 

from django.urls import path
from . import views
urlpatterns = [
    path('members/', views.members, name='members'),
]

 

  1. ایجاد و پیکربندی Templates

نتیجه پردازش درخواست باید در قالب فایل HTML به مرورگر بازگردد. این فایل باید در Templates ساخته شود. بنابراین در ادامه، یک پوشه با نام “templates” در داخل پوشه “members” ساخته و فایل HTML را به‌نام “myfirst.html” ایجاد کنید.

ساختار فایل باید به این صورت باشد:

 

my_tennis_club
    manage.py
    my_tennis_club/
    members/
        templates/
            myfirst.html

 

فایل HTML را باز کنید و کدهای زیر را در آن بنویسید:

 

<!DOCTYPE html>
<html>
<body>
<h1>Hello World!</h1>
<p>Welcome to my first Django project!</p>
</body>
</html>

 

  1. ایجاد و پیکربندی Middleware

میان‌افزار فراخوانی است که یک پارامتر get_response قابل فراخوانی می‌گیرد و میان‌افزار را برمی‌گرداند. Middleware هم درخواست را دریافت کرده و مانند یک Views، پاسخی را بازمی‌گرداند.

در کد زیر، میان‌افزار را به‌صورت تابع نوشتیم:

 

def simple_middleware(get_response):
    # One-time configuration and initialization.
    def middleware(request):
        # Code to be executed for each request before
        # the view (and later middleware) are called.
        response = get_response(request)
        # Code to be executed for each request/response after
        # the view is called.
        return response
    return middleware

 

آنچه در ماژول های جنگو خواندیم

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

چه رتبه ای می‌دهید؟

میانگین ۵ / ۵. از مجموع ۲

اولین نفر باش

title sign
معرفی نویسنده
نگین فاتحی
مقالات
33 مقاله توسط این نویسنده
محصولات
0 دوره توسط این نویسنده
نگین فاتحی

از اسفند 99 مشغول گشت‌وگذار توی دنیای کلمات هستم؛ با این هدف که خوب بنویسم و این چشم‌انداز که کمک‌های موثری کنم. حالا سه‌ ساله که توی زمینه‌های گوناگون بازاریابی آنلاین مطالعه می‌کنم و یکی از حوزه‌های موردعلاقم، رفتارشناسی مخاطبان این فضا هست. دستاوردهای این مطالعه شده نوشتن محتوایی که امیدوارم شما بخونی، لُب‌کلام رو متوجه بشی، لذت ببری و با دست پر صفحه رو ترک کنی؛ شایدم بقیه نوشته‌هام رو بخونی :)

title sign
دیدگاه کاربران

close-image