MVT (Model-View-Template) Mimarisi
Django gibi modern web çatılarının temelini oluşturan MVT (Model-View-Template) mimarisi, yazılım geliştirmede "sorumlulukların ayrılması" prensibini benimser.
MVT, özellikle Django framework’ünde kullanılan, web uygulamalarını düzenli, sürdürülebilir ve güvenli şekilde geliştirmeyi amaçlayan bir mimari yaklaşımdır.
1. MVT Mimarisi Nedir?
MVT, Django web çatısı tarafından kullanılan bir yazılım tasarım kalıbıdır. Geleneksel MVC (Model-View-Controller) yapısının bir varyasyonudur. Temel amacı, veritabanı mantığını, iş mantığını ve sunum katmanını birbirinden ayırarak kodun yönetilebilirliğini ve ölçeklenebilirliğini artırmaktır.
Bileşenlerin Görevleri:
Model (Veri Katmanı): Veritabanı yapısını tanımlar. Veri ekleme, silme ve güncelleme gibi işlemler burada yönetilir. Django'da her model bir Python sınıfıdır.
View (İş Mantığı Katmanı): Kullanıcıdan gelen isteği (HTTP Request) alır, gerekli veriyi Model'den çeker ve sonucu Template'e gönderir. Köprü görevi görür.
Template (Sunum Katmanı): Kullanıcıya gösterilecek olan HTML dosyalarıdır. Django Template Language (DTL) kullanılarak dinamik içerikler buraya yerleştirilir.
2. MVT Nasıl Çalışır? (İş Akışı)
Bir kullanıcı tarayıcısına bir URL yazdığında sistem şu sırayla çalışır:
URL Konfigürasyonu: İstek önce
urls.pydosyasına gelir. Burada URL, ilgili bir View fonksiyonuyla eşleştirilir.View İşleme: View, isteği analiz eder. Eğer veritabanından bilgi gerekiyorsa Model ile iletişime geçer.
Model Etkileşimi: Model, veritabanından istenen veriyi getirir ve View'a teslim eder.
Template Birleştirme: View, elindeki veriyi alır ve ilgili Template (HTML) dosyasına enjekte eder.
Yanıt (Response): Son oluşturulan HTML sayfası kullanıcıya HTTP yanıtı olarak geri gönderilir.
3. Kod Örnekleriyle MVT Bileşenleri
Bir blog sitesi örneği üzerinden bileşenleri inceleyelim:
A. Model (models.py)
from django.db import models
class Yazı(models.Model):
baslik = models.CharField(max_length=200)
icerik = models.TextField()
tarih = models.DateTimeField(auto_now_add=True)
B. View (views.py)
from django.shortcuts import render
from .models import Yazı
def anasayfa(request):
tum_yazilar = Yazı.objects.all() # Model'den veri çekme
return render(request, 'anasayfa.html', {'yazilar': tum_yazilar}) # Template'e gönderme
C. Template (anasayfa.html)
<h1>Blog Yazıları</h1>
{% for yazi in yazilar %}
<h3>{{ yazi.baslik }}</h3>
<p>{{ yazi.icerik }}</p>
{% endfor %}
4. MVC ve MVT Arasındaki Farklar
Birçok kişi "Django'da Controller nerede?" diye sorar. İşte temel farklar:
| Özellik | MVC (Model-View-Controller) | MVT (Model-View-Template) |
| Kontrol Mekanizması | Controller, hem View hem Model'i yönetir. | Django'nun kendisi (Framework) Controller görevini üstlenir. |
| Görünüm | View, verinin nasıl sunulacağını belirler. | Template, verinin nasıl sunulacağını belirler. |
| İş Mantığı | Controller içinde yer alır. | View içinde yer alır. |
Özetle: Django'da "Controller" görevini framework'ün kendisi otomatik olarak yapar. Bizim yazdığımız views.py aslında MVC'deki Controller'a, templates ise MVC'deki View'a karşılık gelir.
5. Neden MVT Kullanmalıyız?
Hızlı Geliştirme: Bileşenler ayrı olduğu için bir ekipte tasarımcı Template ile uğraşırken, yazılımcı Model ve View üzerine çalışabilir.
Bakım Kolaylığı: Veritabanı yapısını değiştirdiğinizde sadece Model dosyasını güncellemeniz yeterlidir; arayüz bundan etkilenmez.
Güvenlik: Django'nun MVT yapısı, SQL Injection ve XSS gibi saldırılara karşı yerleşik koruma sağlar.
Django projelerinizde bu yapıyı kavramak, karmaşık uygulamaları çok daha sistematik bir şekilde inşa etmenize olanak tanır.
MVT, klasik MVC (Model–View–Controller) mimarisinin Django’ya uyarlanmış hâlidir.
📌 Django geliştiricileri özellikle Controller kavramını ayrı bir katman olarak adlandırmaz; bu görevi büyük ölçüde View üstlenir.
MVT’nin Temel Bileşenleri
Kullanıcı (Browser)
↓
URLconf
↓
View
↓
Model ↔ Veritabanı
↓
Template
↓
Kullanıcıya HTML
Model (M)
📌 Model Nedir?
Model, uygulamanın:
Verisini
Veritabanı yapısını
İş kurallarını
temsil eder.
Django’da modeller ORM (Object Relational Mapping) ile yazılır.
📄 Örnek Model
from django.db import models
class Kitap(models.Model):
ad = models.CharField(max_length=100)
yazar = models.CharField(max_length=100)
yayin_tarihi = models.DateField()
def __str__(self):
return self.ad
🎯 Model’in Görevleri
Tablo oluşturur
Veri doğrulama yapar
CRUD işlemlerini yönetir
SQL yazmadan veritabanı işlemleri sağlar
View (V)
📌 View Nedir?
View, kullanıcının isteğini karşılayan mantık katmanıdır.
HTTP isteğini alır
Gerekirse Model ile konuşur
Uygun Template’i çağırır
⚠️ Django’da View = MVC’deki Controller + View karışımıdır.
📄 Fonksiyon Tabanlı View (FBV)
from django.shortcuts import render
from .models import Kitap
def kitap_listesi(request):
kitaplar = Kitap.objects.all()
return render(request, 'kitaplar.html', {'kitaplar': kitaplar})
📄 Sınıf Tabanlı View (CBV)
from django.views.generic import ListView
from .models import Kitap
class KitapListView(ListView):
model = Kitap
template_name = 'kitaplar.html'
🎯 View’in Görevleri
HTTP GET / POST işlemleri
İş mantığı
Yetkilendirme
Hata yönetimi
Template (T)
📌 Template Nedir?
Template, kullanıcıya gösterilecek HTML katmanıdır.
Django Template Language (DTL) kullanır.
📄 Örnek Template
<!DOCTYPE html>
<html>
<head>
<title>Kitap Listesi</title>
</head>
<body>
<h1>Kitaplar</h1>
<ul>
{% for kitap in kitaplar %}
<li>{{ kitap.ad }} - {{ kitap.yazar }}</li>
{% endfor %}
</ul>
</body>
</html>
🎯 Template’in Görevleri
Sadece sunum
Mantık içermez (if/for hariç)
Güvenli çıktı üretir
URLconf (MVT’nin Gizli Kahramanı)
from django.urls import path
from .views import kitap_listesi
urlpatterns = [
path('kitaplar/', kitap_listesi, name='kitap_listesi'),
]
🎯 Görevi
URL → View eşlemesi
REST mimarisi
Temiz adresleme
MVT ve MVC Karşılaştırması
| MVC | MVT (Django) |
|---|---|
| Model | Model |
| View | Template |
| Controller | View |
MVT’nin Avantajları
✅ Katmanlı mimari
✅ Bakımı kolay
✅ Güvenli
✅ Büyük projelere uygun
✅ Test edilebilirlik
Gerçek Hayat Benzetmesi
🏫 Okul Örneği
Model → Öğrenci kayıt defteri
View → Öğretmen (karar veren)
Template → Karne çıktısı
Yaygın Hatalar
❌ Template’te iş mantığı yazmak
❌ View’i şişirmek
❌ Model’i sadece tablo sanmak
Sonuç
MVT mimarisi:
Django’nun kalbidir
Profesyonel web geliştirme standardıdır
Doğru kullanıldığında büyük sistemleri yönetilebilir kılar

Yorumlar
Yorum Gönder