Pazar, 20 Eylül 2026

Django ile Web Uygulaması Nasıl Yapılır?

13 dk okuma 0 yorum

Django ile Web Uygulaması, Python tabanlı en popüler web frameworklerinden biri olarak, hızlı ve güvenli uygulama geliştirme imkanı sunar. Bu framework, MVC (Model-View-Controller) yerine MVT (Model-View-Template) mimarisiyle, veri tabanı yönetimi, form işleme ve yönlendirme gibi temel web geliştirme görevlerini basitleştirir. Django, çabuk prototipleme, geniş topluluk desteği ve zengin paket ekosistemi sayesinde, hem yeni başlayanlar hem de deneyimli geliştiriciler için ideal bir seçimdir.

Bir Django projesine başlamak, öncelikle sanal ortam oluşturmak ve Django’yu kurmakla başlar. Ardından, proje yapılandırması, uygulama ekleme ve temel ayarların yapılması gerekir. Bu süreç, proje dosya yapısının anlaşılması ve gerektiğinde özelleştirilmesiyle tamamlanır. İyi yapılandırılmış bir proje, kodun sürdürülebilirliği ve genişletilebilirliği açısından kritik öneme sahiptir.

Django ile Web Uygulaması geliştirirken, MVT mimarisi içinde veri modelleri, görünümler ve şablonlar doğru şekilde birbirine bağlanmalıdır. URL yönlendirmeleri, kullanıcı isteklerini uygun görünüme yönlendirerek, dinamik içerik sunmayı sağlar. Uygulamanın performansı ve güvenliği ise, önceden tanımlanmış güvenlik önlemleri ve ölçeklenebilir dağıtım stratejileriyle artırılabilir. Aşağıda, bu adımları detaylı bir şekilde inceleyeceğiz.

Temel Kavramlar ve Tanımlar

Django, Python programlama dilinde yazılmış bir açık kaynak web frameworküdür. MVT (Model-View-Template) mimarisiyle, veri modelleri (Model), iş mantığını yöneten fonksiyonlar (View) ve kullanıcı arayüzünü oluşturan şablonlar (Template) bir araya gelir. Model, veri tabanı tablolarını tanımlar ve ORM (Object-Relational Mapping) sayesinde SQL sorgularını Python nesneleriyle yönetir. View, HTTP isteklerini alır, iş mantığını uygular ve sonucu Template’e gönderir. Template ise HTML, CSS ve JavaScript ile dinamik içerik oluşturur.

Django’nun “admin” paneli, veri tablolarını yönetmek için otomatik olarak oluşturulan bir arayüz sunar. Bu panel, CRUD (Create, Read, Update, Delete) işlemlerini kolaylaştırır ve kullanıcı yönetimi, içerik yönetimi gibi görevleri hızlandırır. Ayrıca Django, form işleme, oturum yönetimi ve dosya yükleme gibi web geliştirmede sık karşılaşılan ihtiyaçları yerleşik modüllerle sağlar.

Framework, “apps” kavramını benimser; her uygulama bağımsız olarak geliştirilebilir ve projeye eklenebilir. Bu yapı, kodun modüler olmasını ve yeniden kullanılabilirliğini artırır. Django’nun paket yönetim sistemi, PyPI üzerinden erişilebilen binlerce üçüncü taraf paketle proje zenginleştirilebilir. Böylece, e-posta gönderiminden sosyal medya entegrasyonuna kadar birçok işlev kolaylıkla eklenebilir.

Django Projesi Kurulumu ve Yapılandırması

İlk adım, sanal bir ortam oluşturmak ve Django’yu yüklemektir. `python -m venv venv` komutu ile sanal ortam oluşturulur, ardından `source venv/bin/activate` ile aktif edilir. Daha sonra `pip install django` komutu ile framework yüklenir. `django-admin startproject mysite` komutu, proje dizinini ve temel ayar dosyalarını hazırlar.

`mysite/settings.py` dosyasında, `INSTALLED_APPS` listesine yeni uygulama eklenir. Örneğin, `python manage.py startapp blog` ile oluşturulan `blog` uygulaması şu şekilde eklenir: `INSTALLED_APPS = [‘blog’, …]`. Bu, Django’nun uygulamanın modellerini, görünümlerini ve URL’lerini tanımasını sağlar.

Veri tabanı bağlantısı, `settings.py` içinde `DATABASES` sözlüğüyle yapılandırılır. SQLite, Django’nun varsayılan veri tabanı olup, geliştiriciler için ideal bir başlangıç noktasıdır. Üretim ortamında ise PostgreSQL veya MySQL tercih edilir. Veri tabanı ayarlarını değiştirmek için `ENGINE`, `NAME`, `USER`, `PASSWORD`, `HOST` ve `PORT` alanları güncellenir. Bu yapılandırma, uygulamanın veri tabanına erişimini sağlar ve veri bütünlüğünü korur.

Model Görünüm ve Şablon MVT Yaklaşımı

Model sınıfları, `models.py` dosyasında tanımlanır. Örneğin, bir blog uygulamasında `Post` modeli, başlık, içerik, tarih ve yazar alanlarını içerebilir. `django.db.models.Model` sınıfından türetilen bu sınıf, otomatik olarak veri tabanı tablosu oluşturur. `python manage.py makemigrations` ve `python manage.py migrate` komutları ile bu değişiklikler veri tabanına uygulanır.

View fonksiyonları, `views.py` içinde tanımlanır ve HTTP isteklerini işler. Örneğin, `def post_list(request):` fonksiyonu, veritabanındaki tüm `Post` nesnelerini alır ve `return render(request, ‘post_list.html’, {‘posts’: posts})` ile şablona gönderir. Django, fonksiyon bazlı ve sınıf bazlı görünümleri destekler; hangisi kullanımın gereksinimlerine bağlı olarak seçilir.

Şablonlar, `templates` dizininde saklanır ve Django’nun şablon dilini kullanır. HTML içinde `{% for post in posts %}` döngüsüyle veri döngüsü yapılır ve `{{ post.title }}` ile değişkenler ekrana yazdırılır. Şablonların temizlik ve yeniden kullanılabilirliği, `include` ve `extends` etiketleriyle sağlanır. Böylece, ortak başlık, altbilgi ve stil dosyaları tek bir yerde tanımlanıp tüm şablonlarda kullanılabilir.

[Django Belgeleri] frameworkün resmi dokümantasyonunda MVT mimarisi detaylı bir şekilde ele alınır. Bu belgeler, yeni başlayanlar için adım adım rehberlik sağlar ve gelişmiş konulara geçişi kolaylaştırır.

URL Yönetimi ve Gelişmiş Özellikler

URL yapılandırması, `urls.py` dosyasında tanımlanır. Proje düzeyinde `mysite/urls.py` içinde, uygulama URL’leri `include()` ile eklenir: `path(‘blog/’, include(‘blog.urls’))`. Her uygulama kendi `urls.py` dosyası ile kendi URL desenlerini yönetir. Bu yapı, URL yönetimini modüler ve okunabilir kılar.

Django, URL’ler arasında dinamik parametreleri (`//`) destekler. Örneğin, `path(‘post//’, views.post_detail, name=’post_detail’)` ile tek bir detay görünümü, tüm gönderileri gösterebilir. Bu yaklaşım, RESTful API geliştirme için de temel bir yapı sunar.

Gelişmiş özellikler arasında form sınıfları, kullanıcı kimlik doğrulama, izinler ve grup yönetimi bulunur. `django.contrib.auth` paketi, kullanıcı kayıt, oturum açma ve parola sıfırlama gibi temel işlemleri sağlar. Geliştiriciler, bu paketleri genişleterek özel kullanıcı alanları ekleyebilir veya sosyal oturum açma entegrasyonu yapabilir.

Dağıtım ve Performans İyileştirme

Uygulamanın üretim ortamına taşınması için `DEBUG = False` ve `ALLOWED_HOSTS` ayarları yapılandırılır. `gunicorn` veya `uWSGI` gibi WSGI sunucuları, Django uygulamasını çalıştırmak için tercih edilir. Ayrıca `nginx` gibi ters proxy sunucuları, statik dosyaları (CSS, JS, görseller) doğrudan servise alarak performansı artırır.

Performans iyileştirmelerinden biri, veritabanı sorgularını azaltmaktır. `select_related` ve `prefetch_related` metotları, ilişkili tabloları tek bir sorguda çekmeyi sağlar. Örneğin, `Post` modeli ile yazar ilişkisi varsa, `queryset = Post.objects.select_related(‘author’)` ile yazar bilgisi tek seferde alınır.

Cache mekanizmaları, Django’nun yerleşik cache frameworküyle (Memcached, Redis) entegre edilir. `CACHE_BACKEND` ayarı ile önbellek sunucusu belirlenir ve `cache_page` dekoratörü ile sayfa düzeyinde önbellekleme yapılır. Bu, tekrar gelen isteklerde veri tabanına erişimi azaltır ve yanıt sürelerini düşürür.

Uzman Önerileri ve İpuçları

Kodu Modüler Tutun: Uygulamaları küçük, bağımsız modüller halinde geliştirin.
Yedekleme Stratejisi Oluşturun: Veritabanı ve dosya yedeklerini düzenli olarak saklayın.
Sürüm Kontrolünü Etkin Kullanın: Git ile kod değişikliklerini yönetmek, geri dönüşü kolaylaştırır.
Test Yazın: Birim testleri, fonksiyonel testlerle hataları erken yakalayın.
Güvenlik Önlemlerini İyileştirin: CSRF koruması, XSS koruması ve şifreleme standartlarını uygulayın.
Performansı Ölçün: Profil araçlarıyla (django-debug-toolbar) sorgu sayısını analiz edin.
Statik Dosyaları Optimize Edin: Görselleri sıkıştırın, CSS/JS minify edin.
Güncel Kalın: Django’nun en son sürümüne geçiş yaparak güvenlik güncellemelerinden yararlanın.
Dokümantasyon Oluşturun: Proje dokümantasyonu, ekip içi koordinasyonu artırır.
Topluluk Katılımını Teşvik Edin: Sorunları GitHub Issues üzerinden takip edin, katkı sağlar.

Sıkça Sorulan Sorular

1. Django ile veri tabanı migrasyonları nasıl çalışır?

Migrasyonlar, veri tabanı şemasındaki değişiklikleri Python kodu olarak saklar. `makemigrations` ile değişiklikleri algılar, `migrate` ile bu değişiklikleri veri tabanına uygular. Bu süreç, sürüm kontrolü ile uyumlu olarak çalışır.

2. Django’da statik dosyalar nasıl yönetilir?

Statik dosyalar, `STATIC_URL` ve `STATIC_ROOT` ayarlarıyla tanımlanır. Geliştirme sırasında `collectstatic` komutu ile dosyalar tek bir dizine toplanır ve üretimde `nginx` gibi sunucular tarafından servis edilir.

3. Django’da kullanıcı kimlik doğrulama nasıl yapılandırılır?

`django.contrib.auth` paketi, kimlik doğrulama sürecini yöneten modeller, görünümler ve şablonlar içerir. Özelleştirme için `User` modelini genişletebilir veya `AbstractUser` ile yeni alanlar ekleyebilirsiniz.

4. Django REST Framework nedir ve ne zaman kullanılır?

DRF, Django üzerinden RESTful API geliştirme için ek kütüphanedir. Serializers, ViewSets ve Routers ile hızlı API oluşturulabilir. Web uygulamanızda veri alışverişi gerekiyorsa tercih edilir.

5. Django uygulamasında performans sorunları nasıl giderilir?

Sorgu sayısını azaltmak için `select_related` ve `prefetch_related` metotlarıyla ilişkili tablolar tek sorguda çekilir; `annotate`, `values` ve `values_list` ise sadece gerekli alanları getirir. Gereksiz JOIN’ler ve alt sorguların ortadan kaldırılması, ORM yerine raw SQL kullanmak da performansı artırır. Profil araçlarıyla (örneğin `django-debug-toolbar`) sorgu sayısı izlenir, en çok zaman alan sorguların optimizasyonu yapılır. Ayrıca asenkron view’ler (`async def`) ve veri önbellekleme (Redis, Memcached) ile yanıt süreleri önemli ölçüde düşürülür.

Form İşleme ve Veri Doğrulama

Django’nun form sınıfları, veri girişini güvenli ve hatasız hale getirir. `forms.Form` ve `forms.ModelForm` sınıfları, form alanlarını tanımlar, validasyon kurallarını uygular ve temiz veriyi model nesnelerine dönüştürür. Örneğin, bir kayıt formu için `UserCreationForm` kullanmak, şifre doğrulamasını otomatik hale getirir. Formlar, `clean_` metodlarıyla alan bazlı özel doğrulama eklenmesine olanak tanır. Ayrıca `widgets` ile form alanlarının HTML çıktısı özelleştirilebilir, böylece kullanıcı deneyimi artırılır.

İşlem sırasında oluşan hatalar, kullanıcı dostu mesajlarla geri bildirilir. `error_messages` özelliğiyle hata metinleri özelleştirilebilir; bu, çoklu dil desteği gerektiren projelerde çeviri dosyalarına bağlanabilir. Form verileri, `request.POST` ve `request.FILES` üzerinden alınır; `is_valid()` çağrısı, tüm validasyonları gerçekleştirir. Geçerli veri, `save()` metodu ile veritabanına yazılır veya custom işlemlerle işlenir.

Uzman Önerileri ve İpuçları

Kodu Modüler Tutun: Uygulamaları küçük, bağımsız modüller halinde geliştirin.
Yedekleme Stratejisi Oluşturun: Veritabanı ve dosya yedeklerini düzenli olarak saklayın.
Sürüm Kontrolünü Etkin Kullanın: Git ile kod değişikliklerini yönetin, geri dönüşü kolaylaştırın.
Test Yazın: Birim testleri, fonksiyonel testlerle hataları erken yakalayın.
Güvenlik Önlemlerini İyileştirin: CSRF koruması, XSS koruması ve şifreleme standartlarını uygulayın.
Performansı Ölçün: Profil araçlarıyla (django‑debug‑toolbar) sorgu sayısını analiz edin.
Statik Dosyaları Optimize Edin: Görselleri sıkıştırın, CSS/JS minify edin.
Güncel Kalın: Django’nun en son sürümüne geçiş yaparak güvenlik güncellemelerinden yararlanın.
Dokümantasyon Oluşturun: Proje dokümantasyonu, ekip içi koordinasyonu artırır.
Topluluk Katılımını Teşvik Edin: Sorunları GitHub Issues üzerinden takip edin, katkı sağlar.

Sıkça Sorulan Sorular

1. Django ile veri tabanı migrasyonları nasıl çalışır?

Migrasyonlar, veri tabanı şemasındaki değişiklikleri Python kodu olarak saklar. `makemigrations` ile değişiklikleri algılar, `migrate` ile bu değişiklikleri veri tabanına uygular. Bu süreç, sürüm kontrolü ile uyumlu olarak çalışır.

2. Django’da statik dosyalar nasıl yönetilir?

Statik dosyalar, `STATIC_URL` ve `STATIC_ROOT` ayarlarıyla tanımlanır. Geliştirme sırasında `collectstatic` komutu ile dosyalar tek bir dizine toplanır ve üretimde `nginx` gibi sunucular tarafından servis edilir.

3. Django’da kullanıcı kimlik doğrulama nasıl yapılandırılır?

`django.contrib.auth` paketi, kimlik doğrulama sürecini yöneten modeller, görünümler ve şablonlar içerir. Özelleştirme için `User` modelini genişletebilir veya `AbstractUser` ile yeni alanlar ekleyebilirsiniz.

4. Django REST Framework nedir ve ne zaman kullanılır?

DRF, Django üzerinden RESTful API geliştirme için ek kütüphanedir. Serializers, ViewSets ve Routers ile hızlı API oluşturulabilir. Web uygulamanızda veri alışverişi gerekiyorsa tercih edilir.

5. Django uygulamasında performans sorunları nasıl giderilir?

Sorgu sayısını azaltmak için `select_related`, `prefetch_related`, `annotate` ve `values` gibi ORM optimizasyonları kullanılır. Ayrıca önbellekleme stratejileri (Redis, Memcached), statik dosya sunucusu (nginx) ve asenkron view’ler performansı artırır.

Sonuç

Django, Python ekosisteminde güçlü bir web framework olarak, MVT mimarisi ve yerleşik araçlarıyla hızlı prototipleme ve güvenli uygulama geliştirme sağlar. Proje yapısının doğru yapılandırılması, veri modellemesinin akıcı olması, URL yönetiminin modülerliği ve performans optimizasyonları, sürdürülebilir ve ölçeklenebilir web uygulamaları oluşturmanın temel taşlarıdır. Uzman önerileri ve sürekli güncel kalma stratejileri, Django geliştiricilerinin rekabet avantajı elde etmelerine yardımcı olur. Bu rehber, Django ile web uygulaması geliştirme sürecini adım adım ele alarak, hem yeni başlayanlar hem de deneyimli profesyoneller için pratik bir kaynak sunar.

Mine Ulubatli

Mine Ulubatli, Son Ajans Haber haber merkezinde görev yapan deneyimli bir gazeteci. Ekonomi, teknoloji ve yerel gündem başlıklarında içerik üretiyor; doğrulanmış bilgiyi hızlı biçimde aktarmayı ilke ediniyor. Arşivinde 327 haber bulunuyor.

Mine Ulubatli yazarının 327 haberi →

Yorum Yap