Django: Python’un Güçlü Web Framework’ü – Kapsamlı Rehber
Giriş
Django, Python programlama diliyle yazılmış üst düzey bir web framework’üdür. Hızlı geliştirme ve temiz, pragmatik tasarımı teşvik etmek için oluşturulmuştur. 2005 yılında geliştirilmeye başlanan Django, günümüzde dünyanın en popüler web framework’lerinden biri haline gelmiştir.
Bu kapsamlı rehberde Django’nun temel özelliklerini, avantajlarını, mimarisini ve nasıl başlayacağınızı öğreneceksiniz. Ayrıca Django’nun SEO avantajlarını ve performans optimizasyon tekniklerini de keşfedeceksiniz.
Django Nedir?
Django, “mükemmellik için gereken zamanı kısaltan” bir web framework’ü olarak tanımlanır. Python tabanlı bu framework, web geliştiricilerinin karmaşık, veritabanı destekli web sitelerini hızlı ve kolay bir şekilde oluşturmasına olanak tanır.
Django’nun Temel Özellikleri
-
Hızlı Geliştirme: Django, geliştiricilerin uygulamaları hızlı bir şekilde prototiplemesine ve üretime geçirmesine olanak tanır.
-
Güvenlik: SQL enjeksiyonu, siteler arası komut dosyası çalıştırma (XSS), siteler arası istek sahteciliği (CSRF) gibi yaygın güvenlik tehditlerine karşı yerleşik korumalar içerir.
-
Ölçeklenebilirlik: En yoğun trafiğe sahip web sitelerinin bile ihtiyaçlarını karşılayacak şekilde tasarlanmıştır.
-
Çok Yönlülük: İçerik yönetim sistemlerinden sosyal ağlara, bilimsel hesaplama platformlarına kadar her türlü web uygulamasını oluşturmak için kullanılabilir.
Django’nun Avantajları
1. Python’un Gücü
Django, Python programlama dili üzerine inşa edilmiştir. Python’un okunabilirliği, geniş standart kütüphanesi ve zengin üçüncü parti modül ekosistemi Django’yu güçlü kılar.
2. Dahili Yönetim Paneli
Django, veritabanı işlemlerini kolayca yönetmek için kullanışlı bir yönetim paneli sunar. Bu panel, temel CRUD (Create, Read, Update, Delete) işlemlerini kod yazmadan gerçekleştirmenizi sağlar.
3. ORM (Object-Relational Mapping)
Django’nun ORM’si, veritabanı işlemlerini Python nesneleriyle yapmanıza olanak tanır. Bu sayede SQL bilgisi olmadan da veritabanı işlemlerini gerçekleştirebilirsiniz.
4. URL Yönlendirme
Django’nun URL yönlendirme sistemi, temiz ve SEO dostu URL’ler oluşturmanıza yardımcı olur. Esnek URL yapılandırması sayesinde karmaşık URL desenlerini kolayca yönetebilirsiniz.
5. Şablon Sistemi
Django’nun şablon motoru, sunum katmanını uygulama mantığından ayırmanıza olanak tanır. Şablon kalıtımı, filtreler ve etiketler sayesinde tutarlı ve sürdürülebilir bir arayüz oluşturabilirsiniz.
Django Mimarisi: MTV Pattern
Django, geleneksel MVC (Model-View-Controller) modelinden biraz farklı olarak MTV (Model-Template-View) modelini kullanır.
-
Model: Veritabanı yapısını tanımlar. Django’nun ORM’si sayesinde Python sınıfları olarak modellenir.
-
Template: Kullanıcı arayüzünü tanımlar. HTML dosyalarıdır ve Django şablon dili ile dinamik içerik oluşturulabilir.
-
View: İş mantığını içerir. Kullanıcıdan gelen istekleri işler ve uygun yanıtı döndürür.
Django Kurulumu
Django’yu kullanmaya başlamak için öncelikle Python’un sisteminizde yüklü olması gerekir. Python yüklüyse, Django’yu pip aracılığıyla kurabilirsiniz:
pip install django
Kurulum tamamlandıktan sonra yeni bir Django projesi oluşturmak için:
django-admin startproject projeadi
Proje oluşturulduktan sonra geliştirme sunucusunu başlatabilirsiniz:
cd projeadi
python manage.py runserver
Bu komut, varsayılan olarak 8000 portunda bir geliştirme sunucusu başlatır. Tarayıcınızda http://127.0.0.1:8000/
adresine giderek Django’nun çalıştığını doğrulayabilirsiniz.
Django Proje Yapısı
Bir Django projesi oluşturduğunuzda, aşağıdaki dosya ve dizinler otomatik olarak oluşturulur:
-
manage.py
: Proje yönetimi için komut satırı aracı -
projeadi/
: Ana proje dizini-
__init__.py
: Boş bir dosya, bu dizinin bir Python paketi olduğunu belirtir -
settings.py
: Proje ayarları ve yapılandırması -
urls.py
: URL yönlendirmeleri -
wsgi.py
: WSGI uygulama giriş noktası (dağıtım için)
-
Django Uygulaması Oluşturma
Django projeleri, bir veya daha fazla uygulamadan oluşur. Her uygulama belirli bir işlevselliği yerine getirir. Yeni bir uygulama oluşturmak için:
python manage.py startapp uygulamaadi
Bu komut, aşağıdaki yapıya sahip bir dizin oluşturur:
-
migrations/
: Veritabanı migrasyon dosyaları -
__init__.py
-
admin.py
: Yönetim paneli yapılandırması -
apps.py
: Uygulama yapılandırması -
models.py
: Veritabanı modelleri -
tests.py
: Testler -
views.py
: Görünüm fonksiyonları
Django Modelleri
Modeller, veritabanı tablolarını Python sınıfları olarak temsil eder. Django’nun ORM’si sayesinde bu sınıfları kullanarak veritabanı işlemlerini gerçekleştirebilirsiniz.
Örnek bir model tanımı:
from django.db import models class Yazar(models.Model): ad = models.CharField(max_length=100) soyad = models.CharField(max_length=100) dogum_tarihi = models.DateField() biyografi = models.TextField() def __str__(self): return f"{self.ad} {self.soyad}" class Kitap(models.Model): baslik = models.CharField(max_length=200) yazar = models.ForeignKey(Yazar, on_delete=models.CASCADE) yayin_tarihi = models.DateField() isbn = models.CharField(max_length=13) sayfa_sayisi = models.IntegerField() ozet = models.TextField() def __str__(self): return self.baslik
Modeli oluşturduktan sonra veritabanına uygulamak için:
python manage.py makemigrations python manage.py migrate
Django Admin Paneli
Django, veritabanı yönetimi için güçlü bir admin arayüzü sunar. Admin paneline erişmek için önce bir süper kullanıcı oluşturmalısınız:
python manage.py createsuperuser
Ardından admin.py dosyasında modellerinizi kaydedebilirsiniz:
from django.contrib import admin from .models import Yazar, Kitap admin.site.register(Yazar) admin.site.register(Kitap)
Admin paneline http://127.0.0.1:8000/admin/
adresinden erişebilirsiniz.
Django Görünümleri (Views)
Görünümler, kullanıcı isteklerini işleyen Python fonksiyonlarıdır. İki tür görünüm vardır: fonksiyon tabanlı görünümler ve sınıf tabanlı görünümler.
Fonksiyon tabanlı görünüm örneği:
from django.shortcuts import render from .models import Kitap def kitap_listesi(request): kitaplar = Kitap.objects.all() return render(request, 'kitaplar/liste.html', {'kitaplar': kitaplar})
Sınıf tabanlı görünüm örneği:
from django.views.generic import ListView from .models import Kitap class KitapListView(ListView): model = Kitap template_name = 'kitaplar/liste.html' context_object_name = 'kitaplar'
Django URL Yönlendirme
URL yönlendirme, gelen istekleri uygun görünümlere yönlendirir. Proje seviyesinde urls.py:
from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('kitaplar/', include('kitaplar.urls')), ]
Uygulama seviyesinde urls.py:
from django.urls import path from .views import kitap_listesi, KitapListView urlpatterns = [ path('', kitap_listesi, name='kitap-listesi'), path('sinif/', KitapListView.as_view(), name='kitap-listesi-sinif'), ]
Django Şablonları
Django şablonları, HTML dosyalarıdır ve Django şablon dili ile dinamik içerik oluşturulabilir. Şablonlar genellikle uygulamanın içindeki templates
dizininde bulunur.
Örnek bir şablon (liste.html):
<!DOCTYPE html> <html> <head> <title>Kitap Listesi</title> </head> <body> <h1>Kitap Listesi</h1> <ul> {% for kitap in kitaplar %} <li> <a href="#">{{ kitap.baslik }}</a> - {{ kitap.yazar }} </li> {% empty %} <li>Henüz kitap bulunmamaktadır.</li> {% endfor %} </ul> </body> </html>
Run HTML
Django Formları
Django, form oluşturmayı ve işlemeyi kolaylaştıran bir form sistemi sunar. Model tabanlı formlar oluşturmak için:
from django import forms from .models import Kitap class KitapForm(forms.ModelForm): class Meta: model = Kitap fields = ['baslik', 'yazar', 'yayin_tarihi', 'isbn', 'sayfa_sayisi', 'ozet']
Formu görünümde kullanma:
from django.shortcuts import render, redirect from .forms import KitapForm def kitap_ekle(request): if request.method == 'POST': form = KitapForm(request.POST) if form.is_valid(): form.save() return redirect('kitap-listesi') else: form = KitapForm() return render(request, 'kitaplar/ekle.html', {'form': form})
Django ve SEO
Django, SEO dostu web siteleri oluşturmak için birçok avantaj sunar:
1. Temiz URL’ler
Django’nun URL yönlendirme sistemi, arama motorları için optimize edilmiş, anlamlı ve temiz URL’ler oluşturmanıza olanak tanır.
path('kitaplar/<int:pk>/<slug:slug>/', views.kitap_detay, name='kitap-detay')
2. Site Haritaları
Django, otomatik site haritası oluşturmayı kolaylaştıran yerleşik bir site haritası framework’ü sunar.
from django.contrib.sitemaps import Sitemap from .models import Kitap class KitapSitemap(Sitemap): changefreq = "weekly" priority = 0.8 def items(self): return Kitap.objects.all() def lastmod(self, obj): return obj.guncelleme_tarihi
3. Meta Etiketleri
Django şablonları, sayfa başlıkları ve meta açıklamaları gibi önemli SEO öğelerini kolayca yönetmenizi sağlar.
<head> <title>{% block title %}Varsayılan Başlık{% endblock %}</title> <meta name="description" content="{% block description %}Varsayılan açıklama{% endblock %}"> </head>
Run HTML
4. Hızlı Sayfa Yükleme
Django’nun önbellekleme mekanizmaları ve performans optimizasyon araçları, sayfa yükleme sürelerini iyileştirerek SEO puanını artırır.
5. Mobil Uyumluluk
Django’nun şablon sistemi, responsive tasarımlar oluşturmayı kolaylaştırır, bu da mobil uyumluluğu artırır.
Django Performans Optimizasyonu
1. Veritabanı Optimizasyonu
-
select_related()
veprefetch_related()
kullanarak veritabanı sorgularını optimize edin -
Sadece ihtiyaç duyulan alanları seçin (
only()
,defer()
) -
Sorguları önbelleğe alın
# Kötü kitaplar = Kitap.objects.all() for kitap in kitaplar: print(kitap.yazar.ad) # Her kitap için ayrı sorgu # İyi kitaplar = Kitap.objects.select_related('yazar').all() for kitap in kitaplar: print(kitap.yazar.ad) # Tek sorgu
2. Önbellekleme
Django, çeşitli önbellekleme backendlarını destekler:
-
Memcached
-
Redis
-
Dosya tabanlı önbellekleme
-
Veritabanı önbellekleme
from django.core.cache import cache def kitap_listesi(request): kitaplar = cache.get('tum_kitaplar') if not kitaplar: kitaplar = Kitap.objects.all() cache.set('tum_kitaplar', kitaplar, 3600) # 1 saat önbellekte kalacak return render(request, 'kitaplar/liste.html', {'kitaplar': kitaplar})
3. Statik Dosyalar
-
collectstatic
komutuyla statik dosyaları bir araya getirin -
CDN kullanın
-
WhiteNoise gibi araçlarla statik dosyaları optimize edin
python manage.py collectstatic
4. Middleware Optimizasyonu
Gereksiz middleware’leri kaldırarak istek/y
Review Django Nedir?: Python’un Güçlü Web Framework’ü – Kapsamlı Rehber.