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:

  1. URL Konfigürasyonu: İstek önce urls.py dosyasına gelir. Burada URL, ilgili bir View fonksiyonuyla eşleştirilir.

  2. View İşleme: View, isteği analiz eder. Eğer veritabanından bilgi gerekiyorsa Model ile iletişime geçer.

  3. Model Etkileşimi: Model, veritabanından istenen veriyi getirir ve View'a teslim eder.

  4. Template Birleştirme: View, elindeki veriyi alır ve ilgili Template (HTML) dosyasına enjekte eder.

  5. 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)

Python
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)

Python
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)

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:

ÖzellikMVC (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ümView, 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

Bu blogdaki popüler yayınlar

Pardus Üzerine Django Kurulumu

Python ile Web Geliştirme: Django App Oluşturma