Python'da Django OOP ile Web Uygulamaları Oluşturma

Python'da Django OOP ile Web Uygulamaları Oluşturma

Python'da Django OOP ile Web Uygulamaları Oluşturma eğitimimizde, Django OOP tekniklerini kullanarak web uygulamalarını nasıl tasarlayacağınızı öğreneceksiniz Bu kurs sayesinde, Django'nun sunduğu avantajlardan yararlanarak yüksek performanslı, güvenli ve ölçeklenebilir web uygulamaları geliştirebileceksiniz Hemen kaydolun, Django OOP ile web geliştirme dünyasına adım atın!

Python'da Django OOP ile Web Uygulamaları Oluşturma

Web uygulamaları oluşturma, günümüzde oldukça popüler bir konudur. Python programlama dilinde ise bu uygulamalar daha çok Django kütüphanesi ile yapılmaktadır. Django, Python programlama dili kullanılarak oluşturulmuş bir web çatısıdır ve model-view-template (MVT) mimarisini kullanır.

MVT mimarisi, verilerin nasıl organize edildiğini ve kullanıcı arayüzlerinin nasıl oluşturulduğunu tanımlayan bir çatıdır. Bu mimaride model, verileri temsil eder; view, templateleri ile birlikte verileri kullanıcıya sunar; ve template, kullanıcı arayüzlerini oluşturur. Her ikisi de oldukça önemli olan model ve view sınıfları için nesne yönelimli programlama prensipleri kullanılır.


Django Nedir?

Django, Python programlama dili üzerinde çalışan ve web uygulama geliştirme sürecini kolaylaştıran bir web çatısıdır. Web uygulamaları için gerekli olan pek çok özelliği içinde barındırır. Django, önemli işlemleri kolaylaştırırken aynı zamanda da uygulamaların geliştirilmesi daha hızlı hale gelir.

Django, yüksek kaliteli ve güvenilir uygulamaların yazılabilmesine olanak tanıyan bir yapıya sahiptir. Django platformu, web geliştirme sürecinde en sık kullanılan web çatıları arasındadır ve her geçen gün daha da fazla kullanıcıya sahip olmaktadır. Açık kaynak kodlu olması, aktif bir geliştirme sürecine sahip olması ve geniş bir topluluğa sahip olması nedeniyle tercih edilmektedir.


OOP Nedir?

OOP, yazılım dünyasında sıkça kullanılan bir terimdir ve yazılım geliştirme sürecinde oldukça elverişlidir. Bu prensip nesne yönelimlide her şey bir nesne olarak ele alınır. Yani, veriler ve bu veriler üzerinde işlem yapacak fonksiyonlar bir nesneye dahil edilir.

Nesne yönelimli programlama kavramı, yazılım sektöründe başlangıçtan bu yana evrim geçirdi. Ancak en temel amacı yazılımın modüler yapıda hızlı ve kolay bir şekilde geliştirilmesini sağlamaktır. OOP ile birlikte sınıflar, nesneler, kalıtım, çok biçimlilik, soyutlama, veri saklama ve kapsülleme konularının üzerinde çalışılarak kodların okunabilirliği ve sürdürülebilirliği artırılabilir.

OOP'nin temel mantığı, nesne olarak düşünebileceğimiz her şeyin sınıflara ayrılabileceği ve her sınıfın kendi özellikleri ve işlevleri olabileceğidir. Bu sayede, kodlar daha anlaşılır, kapsamlı ve kullanışlı hale gelir. OOP arkasında yatan fikir, birden fazla programlama dilinde kullanılan bir prensiptir ve Python gibi dillerde kullanımı oldukça yaygındır.


Nesne Nedir?

Nesne, programlama dilindeki en temel kavramlardan biridir. Bir nesne, herhangi bir veri ve bu veri üzerinde işlem yapabilen fonksiyonları içeren bir tutucudur. Örneğin, bir araba nesnesi, model, renk, hız ve diğer özellikleri gibi veriler içerir ve hareket etmek, hızlanmak veya durmak gibi belirli fonksiyonları gerçekleştirebilir.

Nesneler, sınıflar tarafından tanımlanır. Bir sınıf, nesnelerin özelliklerini ve fonksiyonlarını belirleyen bir yapıdır. Sınıftan türetilen nesneler, sınıfın özelliklerini ve fonksiyonlarını devralır ve kendilerine özgü verilerini saklarlar.

Nesne yönelimli programlama (OOP), bu nesne-sınıf ilişkisine dayanır. OOP ile birlikte, programlama daha modüler ve esnek bir hale gelir. Ayrıca, kod tekrarını azaltır ve daha kolay bakım yapılmasını sağlar.


Sınıf Nedir?

Sınıf, genel olarak nesne yönelimli programlamada kullanılan bir kavramdır. Bir sınıf, bir nesnenin özelliklerini ve fonksiyonlarını belirleyen bir yapıdır. Bu yapıda nesneler, bir sınıfın özelliklerini ve işlevlerini kullanarak oluşturulur.

Bir sınıf, belirli bir veri yapısını tanımlar. Özellikleri ve özellikler üzerinde işlem yapan fonksiyonları içerir. Örneğin, bir araba nesnesi, marka, model, renk gibi özellikleri ve hızlanma, fren yapma gibi işlevleri içeren bir sınıf olabilir. Bu sınıf, birden fazla araba nesnesi için özellikleri ve işlevleri tanımlar ve bu nesneler birbirinden bağımsızdır.

Bir sınıf tanımlandıktan sonra, nesne oluşturmak için sınıfın özellikleri ve fonksiyonları kullanılabilir. Nesneler, sınıftan türetildikleri için sınıfın özelliklerini ve işlevlerini içerir.


Nesne Oluşturma

Nesne oluşturmak için öncelikle bir sınıf tanımlamanız gerekmektedir. Tanımlanan bu sınıf, verileri ve bu veriler üzerinde işlem yapabilen fonksiyonları içeren bir tutucudur. Sınıf tanımlandıktan sonra, bu sınıftan bir nesne oluşturmak oldukça kolaydır.

Örneğin, aşağıdaki kodda "Araba" sınıfı tanımlanmıştır:

Kod Açıklama
class Araba: Araba sınıfının tanımlandığı kısımdır.
    marka = "" Arabanın markasını tutan bir değişken tanımlanmıştır.
    model = "" Arabanın modelini tutan bir değişken tanımlanmıştır.
    yil = 0 Arabanın üretim yılını tutan bir değişken tanımlanmıştır.

Yukarıdaki kod, Araba sınıfının tanımlandığı bölümdür. Bu sınıftan bir nesne oluşturmak için ise aşağıdaki gibi bir kod bloğu kullanabilirsiniz:

Kod Açıklama
araba = Araba() "Araba" sınıfından bir nesne oluşturuldu.
araba.marka = "Renault" Araba nesnesinin markası "Renault" olarak ayarlandı.
araba.model = "Clio" Araba nesnesinin modeli "Clio" olarak ayarlandı.
araba.yil = 2018 Araba nesnesinin üretim yılı 2018 olarak ayarlandı.

Yukarıdaki kod bloğu, Araba sınıfından bir nesne oluşturulduktan sonra, nesnenin "marka", "model" ve "yil" özelliklerinin sırasıyla "Renault", "Clio" ve "2018" olarak ayarlandığını göstermektedir.


Miras Alma

Miras alma, OOP prensipleri ile yazılan kodlar için oldukça önemlidir. Bu prensibe göre bir sınıfın başka bir sınıftan özelliklerini devralması mümkündür. Böylece başka bir sınıfın özelliklerini kullanarak mevcut bir sınıfa yeni özellikler eklemek mümkündür. Bu işlem, kod tekrarını önler ve sınıf hiyerarşisinde büyük bir esneklik sağlar.

Python'da miras alma işlemi oldukça basittir. Miras alınacak sınıfın adı, yeni oluşturulan sınıfın parantez içinde belirtilir. Miras alınacak sınıf, üst sınıf olarak da bilinir. Bu şekilde, alt sınıf üst sınıfın tüm özelliklerini devralır ve üst sınıf ile aynı işlemleri yapabilme yeteneğine sahip olur.

Bir sınıfın başka bir sınıftan özelliklerini devralabilmesi, kodun daha az yazılmasını sağlar ve nesne yönelimli programlama prensiplerine uygun şekilde yazılan kodların daha erişilebilir ve anlaşılır olmasına yardımcı olur.


Model-View-Template (MVT) Mimarisinde OOP

Django, Model-View-Template (MVT) mimarisini kullanarak OOP prensiplerine uygun web uygulamaları geliştirilmesine olanak sağlar. Bu mimaride, model sınıfları verileri temsil ederken, view sınıfları templateleri ile birlikte verileri kullanıcıya sunar ve template sınıfları kullanıcı arayüzlerini oluşturur.

Model sınıfları, veritabanındaki tabloların ve tablodaki sütunların birer nesnesini temsil eder. Bu sınıflar, SQL sorgularını yazmaya gerek kalmadan doğrudan Python kodu kullanılarak veritabanında işlemler yapmayı mümkün kılar.

View sınıfları ise, model sınıflarının sağladığı veri kaynaklarından yararlanarak, işlemleri gerçekleştirir ve sonuçları template sınıflarına geçirir. Template sınıfları, view fonksiyonu tarafından oluşturulan verileri kullanarak, kullanıcı arayüzlerini HTML kodlarına dönüştürür. Bu sayede, verilerin ve arayüzlerin birbirinden bağımsız olarak geliştirilmesi mümkün hale gelir.


Model Sınıfları

Model sınıfları, Django ile bir web uygulamasında verilerin nasıl saklanacağını ve veritabanındaki tabloların nasıl temsil edileceğini belirlemek için kullanılır. Veritabanı işlemleri yapmak için bir veritabanı yönetim sistemine (VYS) ihtiyacımız vardır ve bu, genellikle PostgreSQL, MySQL ve SQLite gibi birçok farklı VYS seçeneği sunar.

Veri yapısını belirledikten sonra, model sınıfları veritabanı tablolarını temsil eder. Bu sınıfların her biri belirli bir tabloyu temsil eder ve tablodaki her sütun, bir model sınıfı özelliğiyle eşleştirilir. Model sınıfları, veritabanı işlemleri yapmak için kullanılan önemli bir özelliktir ve Django'nun sunduğu ORM (Nesne İlişkisel Eşleme) sistemi ile entegre haldedir.

Bu model sınıfları ayrıca, admin panelinde tablolara erişmek, veri eklemek, çıkarmak veya güncellemek için kullanılır. Aynı zamanda, view sınıfları gibi diğer Django bileşenleri de bu modele erişebilir ve veritabanından gelen veri ile bir kullanıcı arayüzü oluşturabilir.

Özetle, model sınıfları Django web uygulamasının veri katmanını oluşturur. Bu sınıflar tablolarda saklanan verilerin saklanma şeklini belirler ve Django ORM tarafından veritabanı işlemlerinin yapılmasını kolaylaştırır. Django'nun sunduğu model sınıfları ile veritabanınıza hızlı ve kolay bir şekilde erişebilirsiniz.


View Sınıfları

View sınıfları, Django'da model sınıflarından veri çekerek kullanıcı arayüzünü oluşturmak için kullanılır. Bu sınıflar, model sınıflarından gelen verileri işleyerek template sınıfları ile birleştirir ve sonuç olarak kullanıcı arayüzünü oluşturur.

Bu sınıflar, genellikle HttpResponse sınıfından bir nesne döndürür ve bu nesne kullanıcıya gösterilmek üzere uygun bir şekilde hazırlanır. HttpResponse sınıfı, HTML, JSON gibi farklı veri formatlarını destekler. Ayrıca, view sınıfları, HTTP isteklerini işlemek ve gerekli verileri almak için kullanılabilir.

Django'da view sınıflarının özellikle Class-Based View (CBV) adında bir yapılandırması bulunur. CBV, uygun sınıfların kullanılması ile işlemler sırasında tekrar kullanılan kodların azaltılmasına ve sürecin daha düzgün bir şekilde yönetilebilmesine olanak tanır.

View sınıfları, ayrıca bir kullanıcının isteklerine yanıt verebilir. Örneğin, bir kullanıcının bir veritabanında bir öğe ekleme talebi olabilir. View sınıfları, bu istekleri işleyerek veritabanında değişiklik yapabilir ve sonucu kullanıcıya göstermek için HttpResponse sınıfından bir nesne döndürebilir.


Template Sınıfları

Template sınıfları, Django web uygulamasında kullanıcının karşısına çıkacak olan arayüzlerin oluşturulduğu sınıflardır. Bu sınıflar HTML kodlarını yazarken, model ve view sınıflarından aldığı verileri kullanır. HTML kodları içerisinde değişkenler kullanılarak, model sınıfından gelen verilerin doğru yerlere yerleştirilmesi sağlanır. Bu değişkenler Double Braces '{{}}' tagları ile belirtilir.

Bir Django template kodu şu şekilde tanımlanır:

    {{ page_title }}        {% for post in posts %}                

{{ post.content }}

{% endfor %}

Bu örnekte, page_title ve header değişkenleri view sınıfından, posts değişkeni ise model sınıfından alınmaktadır. "for" döngüsü ile posts değişkenindeki her bir veri için h2 etiketi içinde başlık, p etiketi içinde içerik yazdırılır. Bu sayede her bir kayıt ayrı ayrı listelenir.

Django, template dosyalarının yanı sıra statik dosyaların yönetimi için de bir sistem sunar. Bu sistem sayesinde, CSS, JavaScript ve resim dosyaları da kolayca template dosyalarına dahil edilebilir. Bunun için {{% static %}} tagı kullanılır.

Bir template içinde, CSS dosyası dahil etmek için örnek kullanım şu şekildedir:

{% load static %}

Bu örnekte, "load static" tagı template dosyasının static dosyaları yükleyebilmesi için yüklenir. Daha sonra "link" tagı ile stil dosyasının bağlantısı verilir. Bağlantıda {{% static %}} tagı kullanılarak, doğru dosya yolu belirtilir.


OOP İle CRUD İşlemleri

CRUD işlemleri, veritabanı işlemlerinde sıkça kullanılan temel fonksiyonların kısaltmasıdır. Bu işlemler, Django'nun da diğer web uygulama çatıları gibi kullanılabilir.

Veritabanı işlemleri için kullanılan bu fonksiyonlar; Create, Read, Update ve Delete işlemlerinden oluşmaktadır. Sırayla açıklamak gerekirse:

  • Create (Oluşturma): Yeni bir kayıt eklemek için kullanılır. Örnek olarak, bir kullanıcının yeni bir hesap oluşturması esnasında kullanılır.
  • Read (Okuma): Verileri okumak için kullanılır. Örneğin, kayıtlı tüm kullanıcıların listesi okunur.
  • Update (Güncelleme): Var olan bir kaydı güncellemek için kullanılır. Örneğin, bir kullanıcının profil bilgilerini güncellediği durumlar.
  • Delete (Silme): Kaydı silmek için kullanılır. Örneğin, kullanıcının bir hesabını silmek istemesi halinde kullanılır.

CRUD işlemleri, veritabanı işlemleri için temel fonksiyonları kapsar. Django framework'ü içerisinde bu işlemleri hızlı ve güvenli şekilde gerçekleştirmenin birçok yolu vardır. Bu yüzden Django, web uygulamalarının hızlı şekilde geliştirilmesini sağlamak için oldukça etkili bir araçtır.

Django'yu kullanarak web uygulamaları geliştirirken CRUD işlemleri oldukça önemlidir ve geliştiriciler için epey zaman tasarrufu sağlayabilir. Django, geliştiricilere her biri için bir sınıf sağlayarak CRUD işlemlerini kolaylaştırır. Bu sayede, CRUD işlemleri hızlıca yapılabildiği gibi daha az hata yapılması da sağlanır.


Veritabanı Yaratma

Web uygulamalarında kullanılan verilerin saklanması için veritabanı kullanılır. Django'da da veritabanı ilişkisel bir yapıda oluşturulur ve model sınıfları aracılığıyla tanımlanır. Veritabanına kaydedilecek veriler, model sınıfları içinde tanımlanan niteliklerle (field) belirtilir.

Verileri saklamak ve kullanmak için öncelikle models.py dosyasında tanımlanan model sınıflarının veritabanı tablolarına dönüştürülmesi gerekir. Bu işlemi gerçekleştirmek için öncelikle Django ORM (Object-relational mapping) yapısının kullanılması gerekir. ORM sistemi, nesne yönelimli programlamanın kullanılması ve veritabanı işlemlerinin nesne yönelimli bir şekilde gerçekleştirilmesi için tasarlanmıştır.

Veritabanı yaratma işlemi için öncelikle models.py dosyasında oluşturulan model sınıflarının bulunduğu bölüm açılır. İlgili sınıfların tanımlandığı bölüme aşağıdaki örnek kod eklenir:

Dosya AdıKod
models.pyfrom django.db import models
class Kategori(models.Model):
 kategori_adi = models.CharField(max_length=100)
 aciklama = models.TextField()

Bu örnekte Kategori adında bir model sınıfı tanımlanmıştır. İlgili sınıf içinde kategori adı ve açıklama adında iki nitelik tanımlanmıştır. Bir niteliğin veri tipine göre, bir önceki örnekte olduğu gibi max_length parametresi kullanılarak karakter sayısı belirtilir.

Model sınıfları tanımlandıktan sonra yönetici sayfasından yaratılabileceği gibi veritabanı yaratma işlemi django-admin.py ile de yapılabilir.


Oluşturma (Create)

CRUD işlemlerinden olan oluşturma işlemi, yeni bir kaydı veritabanına eklemeyi sağlar. Bu işlem için öncelikle models.py dosyasında oluşturulan sınıfların veritabanı tablolarına dönüştürülmesi gerekir. Daha sonra, ilgili sınıf üzerinde save() fonksiyonu kullanılarak yeni bir kayıt oluşturulur. Örneğin, bir blog uygulaması için yeni bir yazı oluşturmak istediğinizde, aşağıdaki gibi bir kod bloğu kullanılabilir:

Django Kodu Anlamı
from myapp.models import BlogPost Veritabanındaki BlogPost modelini import et
post = BlogPost(title='Yeni Blog Başlığı', content='Blog içeriği buraya yazılır.') Yeni bir post nesnesi oluştur ve title ve content özelliklerine değerler ata
post.save() Veritabanına kaydı kaydet

Bu kod bloğu, yeni bir blog yazısı oluşturur ve veritabanına kaydeder. Ayrıca, ilgili model sınıfı içindeki diğer özelliklere de değer atayabilirsiniz. Oluşturma işlemi için veritabanı yaratılmış olmalıdır ve veritabanı kayıtlarında değişiklik yapılacaksa, Django veritabanı yöneticisi kullanılarak ayarlamalar yapılmalıdır.


Okuma (Read)

Web uygulamaları, veritabanında depolanan bilgileri kullanıcılara sunarken sıklıkla CRUD işlemlerinden olan okuma işlemi yapılır. Django'da, Model sınıfları üzerinde filter() veya get() fonksiyonları ile kayıtlar okunabilir.

Filter() fonksiyonu ile veritabanında belirli şartlara göre kayıtlar filtrelenir. Örneğin:

Örnek Kod Açıklama
entry.objects.filter(publish_date__lte=timezone.now()) Bugünün tarihinden önce yayınlanan tüm entry'leri getirir.
Entry.objects.filter(publish_date__year=2021) 2021 yılında yayınlanan tüm entry'leri getirir.

Get() fonksiyonu ise tek bir kaydı getirmek için kullanılır. Bu fonksiyon kullanıldığında, filtreleme işlemi direkt olarak yapılır ve tek kayıt getirildiği için QuerySet tipinde değil, sadece Model tipinde bir değer döner.

Örnek Kod:

Entry.objects.get(id=1)

Bu fonksiyon kullanıldığında, id'si 1 olan entry getirilir.

Okuma işlemi ile birlikte getirilen kayıtların view ve template sınıfları aracılığıyla kullanıcılara sunulması sağlanır. Bu sayede, kullanıcılar veritabanında yer alan bilgileri okuyabilir ve ilgili işlemleri gerçekleştirebilir.


Güncelleme (Update)

Güncelleme (Update) işlemi CRUD işlemleri arasında yer alan bir işlemdir. Bu işlem veritabanında bulunan bir kaydın özelliklerinin değiştirilmesini sağlar. Güncelleme işlemi Model sınıfı üzerinde save() fonksiyonu kullanılarak gerçekleştirilir.

Öncelikle güncellemek istediğimiz kaydı get() fonksiyonu ile Model sınıfından çekiyoruz. Ardından bu kaydın özelliklerini değiştiriyoruz. Değişiklikler yapıldıktan sonra save() fonksiyonu ile kaydı güncelliyoruz. Aşağıda örnek bir güncelleme işlemi gösterilmiştir:

İşlem Adı Kullanılan Fonksiyon Örnek Kod
Güncelleme (Update) save()
 # İlgili kaydı getir ozel_kayit = Ozellikler.objects.get(id=1)  # Kaydın özelliklerini değiştir ozel_kayit.ad = "Yeni Ad" ozel_kayit.soyad = "Yeni Soyad"  # Kaydı güncelle ozel_kayit.save()

Bu örnekte, Ozellikler adındaki bir Model sınıfı içinde yer alan 1 numaralı kaydın ad ve soyad özellikleri değiştirilmiştir. Değişiklikler save() fonksiyonu ile kaydedilmiştir.

Python'da Django ile web uygulamaları oluşturma sürecinde güncelleme işlemi oldukça önemlidir. Dikkatli bir şekilde yapıldığında, veritabanındaki kayıtların güncelleme işlemleri kolayca gerçekleştirilebilir ve güncel tutulabilir.


Silme (Delete)

Oluşturulan kayıtların veri tabanından silinmesi için CRUD işlemleri arasında yer alan "D" harfi Delete (Silme) işlemi için kullanılır. Bu işlemin gerçekleştirilmesi için Model sınıfı üzerinde bulunan delete() fonksiyonu kullanılır.

Örneğin, bir web uygulamasında kullanıcılar arasında mesajlaşma işlemi yapılmaktadır ve bir kullanıcı mesajlarını silmek istiyor. Bu durumda öncelikle sorgu yaparak silinmek istenen mesajın ilgili kaydının Model sınıfından çekilmesi gerekir. Daha sonra bu kaydın delete() fonksiyonu kullanılarak veri tabanından silinmesi sağlanır.

delete() fonksiyonu, silmek istediğimiz kaydı bir argüman olarak alır ve bu kaydı veri tabanından siler. Veri tabanından silme işlemi gerçekleştiğinde silinen kaydın özellikleri artık veri tabanında bulunmaz. Bu işlemin gerçekleştirilmesi sonrasında ilgili liste veya tablo, silinen kaydın artık gösterilmediği bir arayüz sunar.