Django views.py Mantığı ve Kullanımı

Django'nun MVT (Model-View-Template) mimarisinde, "View" katmanı işin beynidir. Kullanıcıdan gelen isteği (Request) alır, gerekli mantıksal işlemleri yapar, veritabanı ile konuşur ve kullanıcıya bir yanıt (Response) döner.


1. View'in Temel Mantığı: İstek ve Yanıt

Her Django view'i (görünümü) özünde çok basit bir kurala dayanır:

Bir HttpRequest nesnesi alır ve bir HttpResponse nesnesi döndürür.

Süreç şöyle işler:

  1. Kullanıcı bir URL'e gider (örneğin: /blog/).

  2. urls.py, bu URL'i ilgili View fonksiyonuna yönlendirir.

  3. View, veritabanından veri çeker veya işlem yapar.

  4. Sonuç, bir HTML şablonu (Template) veya JSON verisi olarak kullanıcıya geri gönderilir.



1. Django’da View Nedir?

Django mimarisi MTV (Model – Template – View) yapısına dayanır.

View, bir HTTP isteğini (request) alır, gerekli işlemleri yapar ve bir HTTP yanıtı (response) döndürür.

Basitçe:

Tarayıcı → URL → View → (Model) → Template → Response

2. views.py Dosyasının Konumu

Bir Django uygulaması oluşturulduğunda otomatik olarak gelir:

blog/
 ├── views.py
 ├── models.py
 ├── urls.py

Her app, kendi views.py dosyasına sahiptir.


3. En Basit View Örneği

from django.http import HttpResponse

def index(request):
    return HttpResponse("Merhaba Django")

Satır Satır Açıklama

  • request: Tarayıcıdan gelen HTTP isteği

  • HttpResponse: Tarayıcıya gönderilecek yanıt

  • Fonksiyon adı: URL ile eşleşir


4. Function-Based Views (FBV)

Fonksiyon tabanlı view’ler öğrenmesi en kolay olanlardır.

Örnek: Parametre Alan View

def selamla(request, isim):
    return HttpResponse(f"Merhaba {isim}")

urls.py:

path('selam/<str:isim>/', views.selamla)

5. Template Kullanan View

render() Fonksiyonu

from django.shortcuts import render

def anasayfa(request):
    return render(request, 'index.html')

Veri Gönderme (Context)

def hakkimizda(request):
    context = {
        'okul': 'Anadolu Lisesi',
        'yil': 2026
    }
    return render(request, 'hakkimizda.html', context)

6. Model ile Çalışan View

from .models import Kitap

def kitap_listesi(request):
    kitaplar = Kitap.objects.all()
    return render(request, 'kitaplar.html', {'kitaplar': kitaplar})

Ne Oldu?

  • Veritabanından veri çekildi

  • Template’e gönderildi

  • HTML üzerinde listelendi


7. GET ve POST İstekleri

Form İşleyen View

def iletisim(request):
    if request.method == 'POST':
        ad = request.POST.get('ad')
        mesaj = request.POST.get('mesaj')
        return HttpResponse("Mesaj alındı")

    return render(request, 'iletisim.html')

8. Redirect ve reverse()

from django.shortcuts import redirect

def giris(request):
    return redirect('anasayfa')

URL ismi kullanmak en iyi pratiktir.


9. Hata Sayfaları (404 – 403)

from django.http import Http404

def detay(request, id):
    if id < 1:
        raise Http404("Sayfa bulunamadı")

10. Class-Based Views (CBV)

Basit CBV

from django.views import View
from django.http import HttpResponse

class AnasayfaView(View):
    def get(self, request):
        return HttpResponse("CBV Anasayfa")

urls.py:

path('', AnasayfaView.as_view())

11. Generic Class-Based Views

Listeleme

from django.views.generic import ListView
from .models import Kitap

class KitapListView(ListView):
    model = Kitap
    template_name = 'kitaplar.html'

12. Login Required View

from django.contrib.auth.decorators import login_required

@login_required
def profil(request):
    return render(request, 'profil.html')

13. İyi View Yazma Prensipleri

✔ View kısa ve sade olmalı
✔ İş mantığı modele taşınmalı
✔ Tek sorumluluk prensibi
✔ URL isimleri kullanılmalı


14. Sık Yapılan Hatalar

❌ View içinde HTML yazmak
❌ Uzun if-else blokları
❌ Veritabanı sorgularını karmaşıklaştırmak


15. Sınıf İçi Lab Senaryosu

🎯 Amaç: Kitap Listeleme Sistemi

  • Model: Kitap

  • View: Listele, Detay

  • Template: tablo görünümü

  • Yetkilendirme: login_required


16. Özet

  • views.py Django’nun kalbidir

  • Request → Response mantığını yönetir

  • FBV ile başlanır, CBV ile ölçeklenir



Yorumlar

Bu blogdaki popüler yayınlar

Pardus Üzerine Django Kurulumu

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