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

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, 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 ve decimal_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.

Leave A Comment

Your email address will not be published. Required fields are marked *