فصل ۳: آشنایی با معماری MVC/MVT در جنگو

مقدمه
قبل از ورود به مباحث عملیتر، خیلی مهم است که بدانی جنگو بر چه معماریای ساخته شده و این معماری چه کمکی بهت میکند. اکثر فریمورکهای معروف وب از یک الگوی معماری استفاده میکنند تا کدها تمیز، قابل نگهداری و توسعهپذیر باشند. جنگو از معماری MVT استفاده میکند که شباهت زیادی به MVC دارد.
مفهوم MVC و MVT چیست؟
معماری MVC
MVC مخفف Model – View – Controller است و یکی از محبوبترین معماریها در دنیای وب و نرمافزار است.
- Model (مدل): منطق داده و ساختار دیتابیس؛ یعنی موجودیتها و ارتباطات اطلاعاتی.
- View (نما): نمایش دادهها به کاربر (مثلاً همان HTMLها).
- Controller (کنترلر): دریافت درخواست کاربر، پردازش منطق و انتخاب View مناسب.
معماری MVT در جنگو
جنگو رویکرد مخصوص خودش را به این معماری دارد و اسم اجزای آن را کمی تغییر داده:
- Model (مدل): مثل همون MVC تعریف میشود، یعنی کار ذخیره و خواندن دادهها از دیتابیس را انجام میدهد.
- View (ویو): اما تفاوت دارد: در جنگو، ویو یعنی همان تابع یا کلاسی که درخواست کاربر را گرفته، داده را پردازش میکند و نتیجهاش را به قالب (Template) میدهد.
- Template (قالب): صفحات HTML و ساختار نمایشی که دادهها را به کاربر نشان میدهد.
پس به زبان ساده:
- Model: کار با دیتابیس
- View: منطق پردازش داده و انتخاب خروجی
- Template: نمایش داده به کاربر
تفاوت MVC و MVT با مثال
تصور کن کاربر دکمه “نمایش لیست کاربران” را کلیک میکند:
- در MVC: درخواست به Controller میرود، controller داده را از Model میگیرد و به View میدهد.
- در MVT جنگو: درخواست به View میرود (ویوی جنگو = کنترلر در MVC)، داده را از Model میگیرد و به Template ارسال میکند تا نمایش داده شود.
در واقع View در جنگو تقریباً همان Controller در MVC است، و Template همان View در MVC است. شاید کمی گیجکننده باشد ولی با کار عملی کاملاً جا میافتد!
| معماری | مدل (Model) | کنترلر (Controller) | نما (View) |
|---|---|---|---|
| MVC | Model | Controller | View (HTML) |
| MVT | Model | View (تابع/کلاس جنگو) | Template (قالب) |
مزایای استفاده از این معماری
- تفکیک وظایف: هر بخش فقط یک کار را انجام میدهد
- نگهداری و تغییر پروژه راحتتر میشود
- گسترش کدها و تیمی کار کردن سادهتر است
نمونه کد ساده برای درک بیشتر
فرض کنیم میخواهی لیست کتابها را نمایش بدهی:
- مدل (Model):
# models.py
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=100)
- ویو (View):
# views.py
from .models import Book
from django.shortcuts import render
def book_list(request):
books = Book.objects.all() # دادهها را میگیرد
return render(request, 'books.html', {'books': books})
- قالب (Template):
<!-- books.html -->
<ul>
{% for book in books %}
<li>{{ book.title }} - {{ book.author }}</li>
{% endfor %}
</ul>
جمعبندی سریع و نکته سئو
- معماری MVT باعث نظم و توسعهپذیری پروژهها میشود.
- نقش بخشهای مختلف را یاد بگیر تا هنگام توسعه جنگو سردرگم نشوی.
- اگر در عبارتهای جستجوی گوگل مثل “معماری MVT جنگو چیست” و “تفاوت MVT و MVC” جستجو کنی، کلی منابع بیشتر پیدا میکنی.