Django
tarih 04. Eyl, 2009 yazar admin in Haberler,internet ve Teknoloji, Linux server, Yazılım
Python tabanlı yeni nesil Web uygulamaları geliştirme platformu
Django (JANG-o diye okunur), modüler, pragmatik bir tasarımla hızlı bir şekilde web uygulamaları geliştirmenize olanak sağlayan açık kaynak kodlu bir web uygulamaları geliştirme platformudur.
Django ‘nun temel prensibi, uygulama geliştirme sürecini olabildiğince otomatize ederek tekrarları ortadan kaldırmaktır. Bunu yaparken de yolunuza çıkıp özgürlüğünüzü kısıtlamaz.
Yazılım mimarisi olarak Model – Template – View (MTV*) yapısındadır. Buradaki “view” terimini “görünüm”den çok “amaç” veya “uygulama” gibi algılamak daha doğru olur. Bu yapı, veri yapımızı ifade eden model katmanının, kullanıcıların etkileşimini sağlayan görsel arayüzümüzden şablonlarla ayrıldığı ve aradaki bağlantının uygulama katmanımız ile sağlandığı bir yapıdır. Katmanların birbirinden net bir şekilde ayrılması bize esneklik ve modülerlik sağlar. (MTV yerine bazen, temelde aynı mimari ayırımı ifade eden MVC (Model – View – Controller) deyimi de kullanılır.)
Bir uygulamanın veri modelini nesneler olarak tanımlarsınız ve SQL yazmadan istediğiniz nesnelere kolayca ulaşmanızı sağlayan zengin bir veritabanı erişim ara yüzünüz olur. Tabi isterseniz SQL yazmanızı engelleyen bir şey de yok. Veritabanı soyutlaması sayesinde popüler veritabanlarına aynı arayüz ile erişebilirsiniz.
URL tasarımı Web uygulamanızın kalitesini gösteren önemli bir noktadır. Django, hiçbir platform kısıtlaması olmaksızın URL ‘lerinizi istediğiniz gibi tasarlamanıza olanak verir. Regular Expression ‘lar ile ifade ettiğiniz URL paternlerini fonksiyonlarınız ile ilişkilendirirsiniz.
Django’nun genişletilebilir esnek ve güçlü şablon sistemi, görsel tasarım ile içeriği tamamen ayırmanızı sağlar.
Kaşe (Cache) sistemi, uygulamanızın istediğiniz yerlerini kaşelemenizi sağlar. İsterseniz tüm bir sayfayı, isterseniz maliyetli bir sorgunun sonucunu kaşede saklayabilirsiniz. Geri planda isterseniz memcached kullanarak hafızada, isterseniz veri tabanında veya başka bir şekilde kaşeleme yapabilirsiniz. Django istediğiniz kaşe sistemini standart bir ara yüz ile kullanmanızı sağlar.
Django sizi yönetici ara yüzleri hazırlama angaryasından da kurtarır. Uygulamanızın modellerini oluşturduğunuzda, içerik yönetimi ara yüzleri de otomatik olarak oluşturulur.
Uygulamalarınızın farklı dilleri desteklemesini sağlamanız da Django ile çok kolay. Django sizin için tercüme edilmesi gerekenleri hazırlar ve uygulamada hiçbir değişiklik yapmaksızın, sadece tercüme dosyalarını temin ederek farklı dilleri desteklemenize olanak verir.
Şimdi bu bahsettiklerimi bir örnekte göstermeye çalışacağım. Burada amacım tam çalışan bir uygulama yaratmaktan çok Django’nun işleyişi ile ilgili fikir vermek.
Örneğimiz bir blog uygulaması olsun. Bu uygulamada konularına göre bloglar ve blogların içinde kullanıcılara ait yazılar olsun.
Blog nesnemizin modelini şu şekilde tanımlıyoruz:
class Blog(models.Model):
title = models.CharField(max_length=100)
is_featured = models.BooleanField(default=False)
Görüldüğü gibi, blogumuzun bir başlığı, bir de öne çıkarılıp çıkarılmayacağını belirten iki tane niteliği (attribute) var. Modelleri veritabanında tablolara karşılık geliyor gibi düşünebiliriz. Nitelikler ise bu tablodaki kolonlardır. Niteliklere verdiğimiz alan (field) tiplerinin veritabanında bir karşılığı vardır. Ancak bunlar her zaman birebir örtüşmek durumunda değildirler. Örneğin EmailAddressField gibi daha özel tipler de kullanabiliriz. Bir EmailAddressField, veritabanında bir karakter alanına karşılık gelse de, içinde tutabileceği değerlerin sadece geçerli e-posta adresleri olması Django tarafından sağlanır.
Şimdi blog yazıları için bir model yaratalım.
class Entry(models.Model):
title = models.CharField(max_length=100)
body = models.TextField()
blog = models.ForeignKey(Blog)
Burada da blogumuzda yer alacak yazıların bir başlığı, bir ana metni olacağını ve bu yazıların blog modeli ile ilişkilendirileceğini ifade etmiş olduk.
Modellerimizi oluşturduktan sonra komut satırından “syncdb” dediğimiz zaman, veritabanımızda bizim için 2 tane tablo yaratılacak.
Artık uygulamamızın modellerine nesne mantığı içinde ulaşabilir ve yeni nesneler yaratabiliriz.
Örneğin “güncel” başlıklı bir blog yaratıp, bu blog içine bir yazı eklemek şu şekilde yapılabilir:
>>> b = Blog(title=’güncel’) >>> b.save() >>> e = Entry(title=’ilk yazı’, body=’Django ile hayat daha kolay’, blog=b) >>> e.save()
Daha sonra nesnelerimize şu şekilde ulaşabiliriz:
>>> b = Blog.objects.get(title=’güncel’) >>> entries = Entry.objects.filter(blog=b)
veya
>>> entries = b.entry_set.all()
Bir kere veri modelimizi tanımladıktan sonra, verileri yaratacak ve kullanacak olan fonksiyonları yazıp URL’ler ile ilişkilendirmemiz gerekmekte.
Örneğin bir blog’un altındaki yazıları listeleyen bir sayfamız olsun istiyoruz. Bunun için regular expression kullanarak bir URL paterni tanımlıyoruz:
urlpatterns = patterns('', ('^blog/(?P<blog_id>d+)/$', 'blog.views.entry_list'),
...
)
Böylece, örneğin “/blog/1/” URL’ine ulaşılmak istenildiğinde, “entry_list” fonksiyonumuzun blog_id=1 parametresiyle çağırılmasını sağlamış oluyoruz.
“entry_list” fonksiyonumuz da blog_id parametresini alıp, gerekli yazı nesnelerin çekip, bir şablon ile render ederek bir HttpResponse nesnesi döndürmelidir. Böyle söyleyince karışık gibi gelse de gerçek uygulama çok daha kısa:
def entry_list(request, blog_id):
blog = Blog.objects.get(id=blog_id)
return render_to_response(‘blog/entry_list.html’,
{‘entries’: blog.entry_set.all()})
Bu fonksiyonumuz id’sini aldığımız blog’un içindeki yazılardan bir konteks yaratıp bunu “entry_list.html” şablonu ile render etmiş olduk.
Şablonumuz “entry_list.html” ise şu şekilde olabilir:
{% for entry in entries %}
<b>{{ entry.blog.title }}: {{ entry.title }}</b><br>
{{ entry.body|truncatewords:"50" }}
{% endfor %}
Bu şablon, kendisine gönderilen “entries” listesi içinde döngüye girerek, yazıların ait olduğu blogun ve yazının başlığı ile yazının metninden ilk 50 kelimeyi basacaktır.
Sadece Django ‘nun web uygulamalarına yaklaşımı ile ilgili fikir vermek amacıyla kısa örneklendirmeye çalıştıysam da olanakların bununla sınırlı olmadığını özellikle belirtmek isterim. Beni etkileyen en önemli özelliklerinden bir tanesi her noktasının kullanıcı tarafından geliştirilmeye açık olmasıdır.
Django size hayatınızı kolaylaştıracak araçlar vermekle kalmaz, ihtiyaçlar çıktıkça bu araçlara yenilerini ekleyebilmenizi sağlayan açık bir platform da sağlar.
Uygulamalarınızı farklı projelerde tekrar tekrar kullanabilirsiniz. Ayrıca başka uygulamaları da kendi projelerinize rahatça entegre edebilirsiniz, çünkü Django uygulamaları aynı mimari yapıyı taşır.
Django’nun şu anki (20 Mart 2008) resmi sürümü 0.96 ‘dır. Bu sizleri altyapının sağlamlığı ile ilgili endişelendirmesin çünkü yüksek trafikli birçok web sitesinde uzun zamandır kullanılmaktadır. Ayrıca açık kaynak kodlu hale gelmesinden bu yana 2 seneyi aşkın zaman geçmesine rağmen temel yapısal bir değişiklik geçirmemiş, sadece yeni özellikler kazanmıştır. Bu da tasarımının ve işleyiş biçiminin doğruluğunu göstermektedir. Nitekim pek çok web platformu, böyle süreler sonunda tamamen yeniden yazılma sürecine girmiş, çoğu da bu süreçten bir daha çıkamamıştır.
Umarım Django ile ilgili iştahınızı kabartmayı başarmışımdır.

