Django Notları - 1

September 06, 2008 4 minute read

Girizgah

Merhabalar. Bu belge, Django’yu öğrenirken DjangoBook1 sitesinden aldığım, biriktirdiğim notlardan oluşmuştur. Belgenin tamamen kusursuz olduğu veya anlatımının çok iyi olduğu konusunda bir garanti vermiyorum; fakat yine de size yardımcı olabilecek notlar bulabileceğinizi umuyorum. Ayrıca, belge ile ilgili bir yanlışlık veya anlatmamı istediğiniz bir nokta olursa, eposta adresimi kullanarak benimle iletişime geçebilirsiniz:

Not: Django’nun ne olduğu, neden onu seçmemiz gerektiği; bu projenin hangi amaçla ortaya çıkarıldığı ve gelişimi hakkında bilgiler, belgeyi kısa tutmak için verilmemiştir. İnternet zengin bir okyanus :-)

Django’ya Başlamak

Çok değil, Şubat 2007’den beri GNU / Linux kullanıyorum ve onu kullanmaya başlamakla programlamaya ilgim hemen hemen aynı zamanlara denk geliyor. İnternet sitesi tasarımlarına ve programlamasına ilgi duyduğum için ilk olarak PHP’ye yönelmiştim ve hiçbir şekilde framework‘un ne anlama geldiğini, ne işe yaradığını çözemememiştim. Hatta bir ara framework ile kastedilen şeyin Wordpress, Joomla ve benzeri şeyler olduğunu zannederdim (belki onlara da framework deniliyor olabilir). İngilizce sözlüğe baktığım zaman karşıma çıkan Türkçe anlamları da beni bir o kadar çıldırtmaya yeterdi: Çatı, çerçeve, web çatısı, web framework.. Yeni başlayan, tecrübesiz kişiler için bu sözcükler gerçekten bir anlam ifade etmiyor.

Sonra, güzel bir deneyim yaşadım. Ben yapacağım her site için tekrar tekrar açıp kodlara bakmak durumunda mıyım? Örneğin, alt tarafı sitenin ana sayfasında bir yazı göstermek için her defasında kodlarla cebelleşmek ne kadar akla mantığa uygundur? Üstelik zaman kavramı da hayatımızın her alanında olduğu gibi, programlamada da son derece önemli, sizce de öyle değil mi? Sıfırdan site yapmak yerine Joomla kuralım, temasını biraz değiştiririz, hazır site kalıbından çıkarmak da çok zor bir şey olmasa gerek hem, öyle değil mi?

Nitekim, nasıl ki kaslarımızı amacı doğrultusunda daha rahat kullanabilmek için kemiklere ihtiyaç duyuyorsak, yapacağımız siteler için de güzel bir altyapıya ihtiyaç duymamız olası, hele ki Python’da. İşte, buna framework deniyor. Düşünün, bir forum veya portal site yapacaksınız. Ama yönetim arayüzü yok :-). Ya da hiç düşünmeyin, hemen Django’yu kullanabilmemiz için neler gerekiyor, ona bakalım.

Django İçin Gerekli Programlar

Kullandığınız dağıtım veya işletim sistemine göre kurulumları değişeceği için, nasıl kurulacağını burada anlatamayacağım. Basit bir araştırma yeter diye umuyorum.

  1. Python
  2. Django
  3. Veritabanı tercihinize göre, Python’a veritabanı desteği:
    • Mysql
    • PostgreSQL
    • Sqlite

Not: Dipnotlarda verilen linkleri kullanmadan önce Paket Yönetici’nizde araştırma yapınız. Tek başlarına çalışmamakla birlikte, birkaç bağımlılığa da ihtiyaç duymaktadırlar. Örneğin python-mysql‘in MySQL’a ihtiyaç duyması gibi.

Nihayet Projemizi Başlatıyoruz

Django için gerekli paketler kurulduktan sonra, projenizi barındırabileceğiniz uygun bir dizinde ilk olarak şu komutu veriyoruz:

gkmngrgn ~/programming  $  django-admin.py startproject mysite

Böylece mysite dizinimiz ve dizin içinde de proje için gerekli dosyalarımız oluşturulacak:

mysite/
    __init__.py
    manage.py
    settings.py
    urls.py

Projemiz ile ilgili yapacağımız tüm işlemler, oluşturduğumuz mysite isimli dizinimizde yapılacak. Diyelim önemli değişiklikler yaptınız ve sitenizi web tarayıcınız ile kontrol etmek istiyorsunuz. O zaman mysite dizinimizde şu komutu vermeniz gerekir:

gkmngrgn ~/programming/mysite $  python manage.py runserver
Validating models...
0 errors found.

Django version 1.0, using settings 'mysite.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Evet, komutun çıktısında da görebileceğiniz gibi, sitenizi http://127.0.0.1:8000/ adresinden kontrol edebilirsiniz. İşlemi sonlandırmak için CONTROL-C tuş kombinasyonunu kullanmanız yeterli. İsterseniz, sonraki adıma geçmeden önce bir bakalım, localhost’tan nasıl görünüyor?

(ekran görüntüsü eksik)

Çok tatlı, öyle değil mi? Şimdi proje dizinimizde (mysite) views.py isminde bir dosya oluşturup, örnek olarak şunları yazalım, açıklama satırlarını (en baştaki hariç, diğer “#” ile başlayan satırlar) yazmasanız da olur:

# -*- coding: utf-8 -*-
# Önce Türkçe karakter desteğimiz için utf-8'i yazdık.
# Şimdi gerekli modülleri çağıralım.
from django.http import HttpResponse
import datetime

# Sonra da datetime ile saat & tarih bilgilerini alarak HttpResponse'u döndürelim.
def current_datetime(request):
    now = datetime.datetime.now()
    html = "<html><body>Saat ve tarihimizi, python modülü kullanarak yazdırdık: %s.</body></html>" % now
    return HttpResponse(html)

Proje dizinimizdeki var olan örnek urls.py dosyasını da şu şekilde değiştirelim:

# -*- coding: utf-8 -*-

from django.conf.urls.defaults import *

# views.py dosyasında yazdığımız fonksiyonu burada çağırıyoruz.
# ama hangi sayfaya..
from mysite.views import current_datetime

# işte hangi sayfaya olduğunu buradan belirliyoruz.
urlpatterns = patterns('',
    (r'^time/$', current_datetime),
)

Bu iki kod hakkında şimdilik sadece http://localhost:8000/time sayfasına, zaman ile ilgili bilgilerimizi yazdırdığımızı söyleyeyim. Dikkat edin, eğer Python dosyalarınızda Türkçe karakter kullanırsanız, kodun başına şunu eklemeyi unutmayın:

# -*- coding: utf-8 -*-
[...]

Hadi, hazır python manage.py runserver komutu yürürlükteyken, bir de şu linke bakalım; http://127.0.0.1:8000/time:

(ekran görüntüsü eksik)

_NOT: Saat yanlış mı gösteriyor? settings.py dosyasını açın. TIMEZONE satırını kendinize göre ayarlayın. Türkiye için:

[...]

# If running in a Windows environment this must be set to the same as your
# system time zone.
TIME_ZONE = 'Europe/Istanbul'

[...]

Bir dahaki yazımızda emeklemeye başlayacağız.. :)