Django ile Python Tabanlı Web Uygulamaları Geliştirmek: Model Oluşturma
Django, Python programlama dili kullanılarak geliştirilen, yüksek seviyeli bir web çatısıdır. Hızlı geliştirme, temiz ve pragmatik tasarım prensipleri üzerine kurulmuştur. Bu makalede, Django kullanarak Python tabanlı web uygulamaları geliştirmenin temel taşlarından biri olan model oluşturma konusuna odaklanacağız. Django’nun ORM (Object-Relational Mapper) yapısını kullanarak, veritabanı işlemlerini nasıl kolaylaştırabileceğimizi ve model tanımlamalarının web uygulamamızın yapısını nasıl şekillendirdiğini inceleyeceğiz.
İçindekiler
- Django Nedir?
- Django ORM (Object-Relational Mapper)
- Model Tanımlama
- Model Alanları ve Veri Tipleri
- Model Metodları
- Django Admin Paneli ile Model Yönetimi
- Model İlişkileri
- Migrasyonlar ve Veritabanı Güncellemeleri
- Query Sets: Veritabanı Sorgulama
- Örnek Model ve Uygulama
- Sonuç
Django Nedir?
Django, Python ile geliştirilen web uygulamaları için bir çerçevedir. Güvenlik, ölçeklenebilirlik ve sürdürülebilirlik gibi önemli konulara odaklanır. Django, geliştiricilerin tekrar eden görevleri otomatikleştirmesine ve karmaşık web uygulamalarını daha hızlı bir şekilde oluşturmasına olanak tanır. Django’nun temel özellikleri arasında ORM, template motoru, form işleme, kullanıcı kimlik doğrulaması ve güçlü bir admin paneli bulunur. Django ile Python tabanlı web uygulamaları geliştirmek, performansı artırırken kod tekrarını da önler.
Django ORM (Object-Relational Mapper)
Django’nun ORM’si, veritabanı ile uygulama arasında bir köprü görevi görür. Geliştiricilerin SQL sorguları yazmak yerine Python nesneleri ile veritabanı etkileşiminde bulunmasını sağlar. Bu, kodun okunabilirliğini artırır, geliştirme sürecini hızlandırır ve veritabanı bağımsızlığını sağlar. Django ORM, çeşitli veritabanı sistemlerini (PostgreSQL, MySQL, SQLite, vb.) destekler ve farklı veritabanları arasında geçiş yapmayı kolaylaştırır.
Model Tanımlama
Django’da model tanımlama, veritabanı tablolarının Python sınıfları olarak temsil edilmesidir. Her model, bir veritabanı tablosuna karşılık gelir ve modelin alanları, tablonun sütunlarını temsil eder. Modeller, models.py
dosyası içinde tanımlanır. Temel bir model tanımlama örneği şöyledir:
from django.db import models
class Urun(models.Model):
ad = models.CharField(max_length=200)
aciklama = models.TextField()
fiyat = models.DecimalField(max_digits=10, decimal_places=2)
yayinlanma_tarihi = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.ad
Bu örnekte, Urun
adında bir model tanımladık. Bu model, ad
, aciklama
, fiyat
ve yayinlanma_tarihi
adında alanlara sahiptir. Her alan, farklı bir veri tipini temsil eder.
Model Alanları ve Veri Tipleri
Django’da model alanları, veritabanı sütunlarının veri tiplerini belirler. Django, çeşitli veri tiplerini destekler:
CharField
: Kısa metin alanları için kullanılır.max_length
parametresi, alanın maksimum uzunluğunu belirtir.TextField
: Uzun metin alanları için kullanılır.IntegerField
: Tam sayı değerleri için kullanılır.FloatField
: Kayan noktalı sayı değerleri için kullanılır.DecimalField
: Kesin ondalık sayı değerleri için kullanılır.max_digits
vedecimal_places
parametreleri, alanın hassasiyetini belirtir.BooleanField
: Doğru veya yanlış değerleri için kullanılır.DateField
: Tarih değerleri için kullanılır.DateTimeField
: Tarih ve saat değerleri için kullanılır.EmailField
: E-posta adresleri için kullanılır.URLField
: URL adresleri için kullanılır.ImageField
: Resim dosyaları için kullanılır.FileField
: Dosya yükleme alanları için kullanılır.ForeignKey
: Başka bir modelle ilişki kurmak için kullanılır.ManyToManyField
: Birden çok modelle ilişki kurmak için kullanılır.
Django ile Python tabanlı web uygulamaları geliştirirken doğru veri tipini seçmek, veritabanı performansını ve veri bütünlüğünü sağlamak için önemlidir.
Model Metodları
Modellere özel metodlar ekleyerek, modelin davranışlarını özelleştirebiliriz. Örneğin, bir ürünün tam adını ve açıklamasını birleştiren bir metod tanımlayabiliriz:
class Urun(models.Model):
ad = models.CharField(max_length=200)
aciklama = models.TextField()
fiyat = models.DecimalField(max_digits=10, decimal_places=2)
yayinlanma_tarihi = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.ad
def tam_bilgi(self):
return f"{self.ad} - {self.aciklama}"
Bu örnekte, tam_bilgi
adında bir metod tanımladık. Bu metod, ürünün adını ve açıklamasını birleştirerek bir metin döndürür.
Django Admin Paneli ile Model Yönetimi
Django, otomatik olarak oluşturulan bir admin paneline sahiptir. Bu panel, modelleri yönetmek, veri eklemek, güncellemek ve silmek için kullanılabilir. Admin paneline erişmek için, bir kullanıcı oluşturmanız ve modeli admin.py
dosyasına kaydetmeniz gerekir.
from django.contrib import admin
from .models import Urun
admin.site.register(Urun)
Bu kod, Urun
modelini admin paneline kaydeder. Artık admin panelinden ürünleri yönetebilirsiniz.
Model İlişkileri
Django, modeller arasında farklı türde ilişkiler tanımlamayı destekler:
ForeignKey
: Bir modelin başka bir modele bağlı olduğunu belirtir. Örneğin, bir ürünün bir kategoriye ait olduğunu belirtmek için kullanılabilir.ManyToManyField
: Bir modelin birden çok modelle ilişkili olduğunu belirtir. Örneğin, bir ürünün birden çok etikete sahip olduğunu belirtmek için kullanılabilir.OneToOneField
: Bir modelin yalnızca bir başka modele bağlı olduğunu belirtir. Örneğin, bir kullanıcının yalnızca bir profile sahip olduğunu belirtmek için kullanılabilir.
Model ilişkileri, veritabanı yapısını daha karmaşık ve anlamlı hale getirir.
Migrasyonlar ve Veritabanı Güncellemeleri
Model tanımlamalarında yapılan değişikliklerin veritabanına yansıtılması için migrasyonlar kullanılır. Migrasyonlar, Django’nun veritabanı şemasını güncellemek için kullandığı araçlardır. Migrasyon oluşturmak ve uygulamak için aşağıdaki komutlar kullanılır:
python manage.py makemigrations
python manage.py migrate
makemigrations
komutu, model tanımlamalarındaki değişiklikleri algılar ve bir migrasyon dosyası oluşturur. migrate
komutu, migrasyon dosyasını veritabanına uygular.
Query Sets: Veritabanı Sorgulama
Django’nun ORM’si, veritabanı sorgularını kolaylaştırmak için QuerySet’leri kullanır. QuerySet’ler, veritabanından veri çekmek, filtrelemek, sıralamak ve güncellemek için kullanılabilir. Örneğin, tüm ürünleri çekmek için aşağıdaki kodu kullanabiliriz:
Urun.objects.all()
Belirli bir kritere uyan ürünleri çekmek için filter
metodunu kullanabiliriz:
Urun.objects.filter(fiyat__gt=100)
Bu kod, fiyatı 100’den büyük olan tüm ürünleri çeker. Django ile Python tabanlı web uygulamaları geliştirirken, verimli sorgular yazmak önemlidir.
Örnek Model ve Uygulama
Şimdi, bir blog uygulaması için örnek bir model tanımlayalım:
from django.db import models
from django.contrib.auth.models import User
class Kategori(models.Model):
ad = models.CharField(max_length=100)
def __str__(self):
return self.ad
class Yazı(models.Model):
baslik = models.CharField(max_length=200)
icerik = models.TextField()
yazar = models.ForeignKey(User, on_delete=models.CASCADE)
kategori = models.ForeignKey(Kategori, on_delete=models.SET_NULL, null=True, blank=True)
yayinlanma_tarihi = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.baslik
Bu örnekte, Kategori
ve Yazı
adında iki model tanımladık. Yazı
modeli, bir yazar ve bir kategori ile ilişkilidir. Bu model, bir blog uygulamasının temel yapısını oluşturur.
Sonuç
Django, Python tabanlı web uygulamaları geliştirmek için güçlü ve esnek bir çerçevedir. Model oluşturma, Django’nun temel özelliklerinden biridir ve veritabanı işlemlerini kolaylaştırır. Bu makalede, Django’da model tanımlama, model alanları, model metodları, admin paneli, model ilişkileri, migrasyonlar ve QuerySet’ler gibi konuları ele aldık. Django ile Python tabanlı web uygulamaları geliştirmeye başlamak için bu bilgilerin size yardımcı olacağını umuyoruz.