Tüm dünyada sıkça kullanılan, popüler Python web framework'ü Django'yu inceliyoruz.
Django, Python programlama dili ile yazılmış MTV mimari desenini kullanan, yüksek seviyeli ve açık kaynak bir web frameworküdür. BSD lisanslı ile lisanslanmıştır ve ismi caz gitaristi Django Reinhardt’tan gelmektedir. Django’yu bu kadar popüler yapan nedenler arasında; basit kurulumu ve kullanımı, detaylı hata raporu sayfaları, genişletilebilir yönetim paneli ve yenilikçi şablon dili gibi bir çok neden sayılabilir.
Django Projesi’nin temel hedefi, karmaşık bir yapıda olan ve bir veritabanı kullanan web uygulamalarının geliştirilmesini kolaylaştırmaktır. Django yeniden kullanılabilirlik, modülerlik, hızlı geliştirme süreci ve DRY(Don’t Repeat Yourself) prensiplerini sonuna kadar kullanma politikasına sahip bir yapıda tasarlanmaktadır.
Bir özgür yazılım olan bu framework; 2005 yılında ABD’nin Kansas eyalatinde bulunan, Lawrence Journal-World adlı günlük gazetenin yazılım geliştiricileri tarafından geliştirilmiş, ülkemizde ve dünyada her geçen gün daha popüler hale gelmektedir. Django, hızlı tempolu habercilik ortamı için geliştirildiği için, web geliştirme işlemlerini hızlı ve kolay hale getirmeyi amaçlar. Şimdi teknik anlamda bize neler sağladığına bakalım.
Neden Bir Framework’e İhtiyaç Duyarız ?
Aslında Django’yu daha iyi anlamak için bu çok önemli bir soru. Tam Türkçe karşılığı olmasa da, Türkçe’ye çatı veya iskelet olarak çevirebileceğimiz bu yapılar içlerinde bir çok kütüphaneyi(library) barındırırlar ve yazılım geliştiricilerinin hayatını kolaylaştırmak için ortaya çıkmışlardır. Örneğin; siz Python ile bir web uygulaması yazmaya kalktığınızda, bu uygulamanın routing(yönlendirme), yetkilendirme, veriye erişim kısmı, şablon sistemi(templates), önbellek sistemi gibi hemen herşeyi kendiniz yazmak zorundasınız. Web framework’leri tam da bu noktada önem kazanıyor, sizlere bir web uygulamasında olması gereken hemen hemen tüm yetenekleri hazır olarak sağlıyor ve sizin sadece uygulamanızı geliştirmeye odaklanmanızı sağlıyor. Tabiki Django gibi açık kaynak ve özelleştirilebilir framework’lerde temel kütüphanelerde de değişiklik yapıp istediğiniz gibi kullanabiliyorsunuz.
Model – Template – View (MTV)
Django, MVC mimari desenine çok benzeyen MTV desenini kullanır. Django geliştiricileri, MVC’deki denetleyici(controller) yerine görünüm(view) kelimesini tercih etmişlerdir, Django’nun yapısı gereği, bazı farklılıkları vardır. Detaylı incelendiğinde yönlendirme(routing) sistemi dolayısıyla bu tanıma daha uygundur. Bu noktada MVC’den ince bir çizgiyle ayrılmaktadır fakat hemen hemen aynı oldukları için isimlendirmelere pek takılmamak gerek.
Model; uygulamanın veriye erişim katmanıdır(data access layer). Veriye nasıl erişileceği, validasyon ve veriler arasındaki ilişkiler gibi veriyle alakalı her şey bu kısımda yer alır. Sizin formlarınızdaki alanlardan tutun, veritabanınızdaki tablolara kadar her şey modellerden üretilir. Örneğin; Person adında bir modeliniz(class) ve bu modelde de, Name, Surname ve Email gibi alanlarınız olabilir.
Template, uygulamanın sunum katmanıdır(presentation layer). Bu katman, web sayfasında veya diğer tür dökümanlarda verilerin nasıl gösterilmesi gerektiği gibi sunum kısmıyla ilgili kararları içerir. Template kısmında işlenip gelen veriler, kullanılan şablon dili(Jinja vb) aracılığıyla şekillendirilerek kullanıcılara sunulur.
View, uygulamanın iş mantığı(business logic) kısmıdır. Bu katman, uygun şablon ve modellere erişimle ilgili mantıksal kısmı içerir. Bunu modeller ve şablonlar arasında bir köprü gibi düşünebilirsiniz. MVC mimari deseninde, denetleyiciye(controller) denk gelmektedir. Model kısmını uygulamanın iskeleti, View kısmını da beyni olarak düşünebilirsiniz.
Eğer web geliştirme için Ruby on Rails gibi başka MVC frameworklere aşinaysanız; Django’daki View’ları denetleyiciler(controllers) olarak, Django şablonlarını(templates) ise MVC’deki View katmanı gibi düşünebilirsiniz.
Genişletilebilir Yönetim Arayüzü
Django’nun en güçlü parçalarından birisi de otomatik yönetim arayüzüdür. Hiçbir ek kurulum gerekmeksizin framework içinde gelir. Bu panel, sitenize hemen içerik eklemeye başlamak için modellerinizin metadata verilerini okuyarak güçlü ve yayınlanmaya hazır bir yönetim arayüzü sunar. Kişisel fikrimi söylemem gerekirse, şimdiye kadar bu kadar genişletilebilir, güçlü ve bu denli özellikler sunan bir yönetim arayüzü daha görmedim. Zaten bir çok framework direk hazır olarak böyle bir yönetim arayüzü sağlamıyor. Ruby on Rails’de, Active Admin gibi Django yönetim arayüzüne benzer üçüncü parti çözümler olsa da hiçbiri Django’daki kadar yetenekli değil malesef.
Bu panel üçüncü parti yan uygulamalarla daha da işlevsel hale getirilebiliyor. Genelde üçüncü parti yan uygulamalar, paneli tasarım olarak değiştirse de, eğer isterseniz captcha, önbellek yönetimi vb gibi birçok çözümü barındırıyorlar. Buna dayanarak, bazı yan uygulamaların panele yeni bir hava kattığını ve yeni işlevsellikler kazandırdığını söyleyebiliriz.
Yönetim arayüzü modellerden otomatik olarak oluşturulur fakat siz hangi modellerin yönetim panelinde yer alacağını işaretlemek zorundasınız. Örneğin Author modelini şöyle bir kod ile yönetim arayüzüne ekleyebilirsiniz;
from django.contrib import admin
from .models import Author
@admin.register(Author)
class AuthorAdmin(admin.ModelAdmin):
pass
Bu kodu daha da kısa yazmak mümkün fakat bir yeri özellikle vurgulamamız gerek. Sınıfın içinde “pass” yazan kısma bu modele yönelik, yönetim panelinde uygulanacak özel direktifleri yazabilirsiniz. Örneğin bu modelin verilerinde yapılacak aramalar için filtreleme kriterleri yazabilir ya da bazı verileri saklayabilirsiniz vb. Burada uygulayabileceğiniz birçok işlem mevcut.
Django Nasıl Çalışıyor ?
Her şey iyi güzel ama bu sistem nasıl işliyor ? Bu kısımda, geleneksel bir Django uygulamasının nasıl çalıştığını ele alalım.
Bir istek web sunucusundan Django’ya geldiğinde, ilk olarak sayfa adresini alır ve ne yapacağını çözmeye çalışır. Bu görev Django url çözümleyici(url resolver) tarafından yapılır. Burada çok fazla bürokrasi yoktur, Django url desenlerinin(patterns) bir listesini alır ve eşleştirmeye çalışır. Bu desenleri yukarıdan aşağıya doğru denetler ve birisi eşleştiğinde ilişkili olan View’a gelen isteği geçirir. Bir mektup ile bir postacı düşünelim, postacı sokakta yürüyor ve mektubun üzerinde yazan bina numarasına göre binalara göz atıyor, doğru numaraya geldiğinde mektubu oraya koyuyor. Django url çözümleyici de aynen böyle çalışıyor.
Görünüm(View) katmanına gelince; tüm ilginç şeyler burada meydana gelir. Bilgi aramak için veritabanına bakabilirsiniz veya kullanıcı verilerinde bir şeyleri değiştirmek isteyebilirsiniz. Örneğin bir profil sayfasında işinizin açıklamasını değiştirdiğinizde, View iş tanımını günceller ve size bir mesaj gönderir, sonrada şablonlar(templates) aracılığıyla bir çıktı oluşturup kullanıcının tarayıcısına gönderebilirsiniz.
Tabi ki bu açıklamaları biraz basitleştirilmiş şekilde yazdım fakat başlangıçta tüm teknik şeyleri bilmeniz gerekmez. Yine de şimdiye kadar fikir sahibi olduğunuzu düşünüyorum.
Sonuç
Tüm detayları bir makalede incelemek mümkün değil, Django’ya derinlemesine bir giriş yapabilir ve tüm detayları öğrenmeye başlayabilirsiniz. Django modern web uygulamaları için çok popüler bir seçim olacaktır. Örneğin; Disqus gücünü Django’dan alan ve ayda 8 milyar, saniyede 45.000 sayfa gösterimi yapan bir servistir. Eğer istek olursa yüksek performanslı Django uygulamaları hakkında bir yazı yazabilirim ve kullanan büyük internet şirketlerini de bu yazı da inceleyebiliriz ya da giriş seviyesi için bir yazı serisi hazırlayabilirim.
Django’yu kurmak istiyorsanız şu linkteki resmi kurulum dökümantasyonuna göz atabilirsiniz, aradığınız her şey bu şahane dökümantasyonda mevcut; https://docs.djangoproject.com/en/1.8/intro/install/
(Yazının orjinali Kod Bilgi Sistemleri ve Yazılım San. Tic. Ltd. Şti. blogunda yine benim tarafımdan yazılıp, yayınlanmıştır).
Mutlu kodlamalar :)