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
HttpRequestnesnesi alır ve birHttpResponsenesnesi döndürür.
Süreç şöyle işler:
Kullanıcı bir URL'e gider (örneğin:
/blog/).urls.py, bu URL'i ilgili View fonksiyonuna yönlendirir.View, veritabanından veri çeker veya işlem yapar.
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ğiHttpResponse: Tarayıcıya gönderilecek yanıtFonksiyon 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.pyDjango’nun kalbidirRequest → Response mantığını yönetir
FBV ile başlanır, CBV ile ölçeklenir
Yorumlar
Yorum Gönder