12 Eylül 2014 Cuma

Django ile proje


Son yazımda size Django’nun kullanım amacı ve mantığı hakkında genel kültür kıvamında bir giriş yaptım. Bugün Django’da bir projenin nasıl oluşturulduğunu ve bu projenin içinde gerçekleşen komut trafiğinden bahsedeceğim. Bunlardan bahsederken Django’nun web için hazırlanmış  bir framework olduğunu bildiğinizi varsayacağım.
Öncelikle yapacağımız  web sayfasının amacını belirleyelim. Bizim basit bir amacımız olacak. O da kullanıcının girdiği yazıyı aynı sayfada listelemek olsun.
Ubuntu işletim sisteminde çalışmanızı öneririm çünkü burada gerekli paketleri daha kolay ve hızlı indirebilirsiniz. Ayrıca windows’tan çok daha dinamik bir yapıya sahiptir. Terminal aracılığı ile Python 2.7 için Django 1.5 versiyonunu kurduktan sonra yeni bir proje oluşturabiliriz.

$ django-admin startproject Proj

komutu ile ‘Proj’ isimli bir proje oluşturmuş oluyoruz.



Startproject komutu ile Django otomatik olarak manage.py ve projenin yapı taşlarını içeren dosya olmak üzere 2 yapı oluşturuyor. manage.py Django ile iletişime geçmenizi sağlayan komut aracıdır. Projenin yapı taşlarını içeren ve projemizin adını taşıyan dosyanın içeriğine baktığımızda 4 farklı Python uzantılı dosya görürüz. Bu dosyalardan 2’si bizi ilgilendiriyor.  settings.py ve urls.py. __init__.py  boş bir dosyadır. Bu dosyanın tek görevi Python'a bu dizinin bir Python paketi olduğunu bildirmektir. Bu dosyayla işimiz olmayacak şimdilik. urls.py,  tarayıcıya girilen URL’den hangi uygulamanın kullanacağını  gösteren haritaları içeren dosyadır. settings.py, projenin ayar ve konfigürasyonlarının yapıldığı dosyadır.
Projemizde görev alacak uygulamayı, yeni uygulama oluşturma komutu ile projemizin içinde oluşturabiliriz. Bir projede birden fazla uygulama yer alabilir. Uygulama oluşturduğumuz anda Django tekrar bize bir taslak oluşturur.


views.py uygulamalarımızı yazacağımız dosyadır. Burada kullanıcıdan request aldığınızda sayfadan gelecek cevap belirlenir. models.py dosyasını  veri tabanını oluşturmak, verilerimizi nasıl depolayacağımızı ve verilerin birbirleriyle olan ilişkilerini tanımlamak için kullanacağız. tests.py, yazdığınız uygulamayı test etmek üzere kullanılan fonksiyonları içeren dosyadır.
Projemizi oluşturmaya başlamadan önce ilk yapmamız gereken Django’ya oluşturduğumuz uygulamamızı ve  kullanacağımız veri tabanını  tanıtmak olacaktır. Bunu Proj/settings.py dosyasında bulunan INSTALLED_APPS bölümüne uygulamamızın adını ekleyerek yapabiliriz.


INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'App1',
)

Kullanacağımız veri tabanını tanıtmak için aynı dosya içinde DATABASES alanında ENGINE olarak sqlite3’ü eklememiz gerekir. Fakat veri tabanının ismini vermek yeterli değildir. Bilgisayardaki konumunu da bildirmek gerekir ki Django bunu nerede bulacağını bilsin. Konum bildirmenin en kolay yolu ‘’os’’ (Operating System) modülünden yararlanıp dosya konumuna ulaşmaktır. Bunu dosyanın en üst satırında aşağıdaki  işlemi gerçekleştirerek yapabiliriz.

import os
BASE_DIR=os.path.dirname(os.path.abspath(__file__))
DATABASE_PATH= os.path.join(BASE_DIR, 'db.sqlite3')

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': DATABASE_PATH,
    }
}






Ayarlarımızı yaptıktan sonra projemizi oluşturmaya başlayabiliriz. Normalde bizim dakikalarca ve bazen saatlerce yazdığımız kodları bilgisayar saniyeler içinde birbirleriyle ilişki kurarak çalıştırdığı için işlem sırası diye bir şeyden bahsetmemiz zor olur. Fakat bir kullanıcının istediği sayfaya gitmek için ilk yapması gereken şeyin tarayıcıya bir URL girmesi olduğunu biliyoruz. O zaman öncelikle kullanıcının hangi URL’yi girdiğinde bizim sayfamıza yönlendirileceğini tanımlayalım. URL’den bahsediyor olmamızdan anlaşılacağı gibi bunu projemizin altında bulunan urls.py dosyasında yapacağız.  Django projemizi oluşturduğumuz anda bize bir taslak oluşturmuştur. Burada tarayıcıya girilen URL’nin bize hangi uygulamayı çağıracağını ilişkilendireceğiz.  URL yi tanımlarken ‘düzenli ifadeler’ denilen  belirli kurallara uyan  yazıları belirleyen şablondan yararlanacağız. url(r’^$’, App1.views.search_gene’)  yazarak oluşturacağımız URL modelinde r- Python’a  tırnak arasındaki string verisini olduğu gibi okuması, herhangi bir karakteri anlamlandırmaması gerektiğini belirtiyor. Tırnak içerisindeki düzenli ifade ise ‘^’ işareti ile yazının başını ; ’$’ işareti ile de yazının sonunu belirtiyor. Yani yazının başı ve sonu arasında karakter olmayacak, boş karakter tanımlanmıştır. url() fonksiyonunun aldığı ikinci parametre çağıracağı uygulamadır. Burada App1 uygulaması altında yer alan views.py dosyasında tanımlanmış search_gene adındaki fonksiyonu hedef olarak gösteriyoruz.  urls.py’de haritamızı çizdikten sonra views.py dosyasında search_gene fonksiyonunu oluşturabiliriz. Faka bundan  önce uygulamada kullanacağımız veri modellerini oluşturmamız gerekir. App1 uygulaması altında yer alan models.py dosyasında kullanıcının aramasını yapabileceği bir TextField() alanı oluşturalım. Modellerimizi oluşturduktan sonra views.py sayfasına oluşturduğumuz bu sınıfı çağırıp kullanıcıdan aldığımız request sonrasında göndermek istediğimiz cevabı oluşturalım. urls.py sayfasında belirttiğimiz gibi  search_gene adındaki fonksiyonu oluşturalım. Bu fonksiyon “post “ metoduyla gelen sayfadan “gene_code” bölümüne girilen veriyi “genes” olarak adlandırdığımız değişkene atayacak. Daha sonra bu veriyi “home.html” template’i üzerinden “items” bölümüne koyarak cevap olarak geri çevirecek. Burada daha önce Django’ya tanıtmadığımız template dikkatinizi çekmiş olmalı. Oluşturduğumuz cevabı görselleştiren html dosyalarını template adındaki bir dosya içinde tutacağız.  Bu dosyayı App1 adındaki uygulamamızın içinde oluşturduktan sonra Django’ya template dosyasının yerini söylememiz gerekir. setting.py dosyasında  yer alan TEMPLATE_DIRS bölümünde dosya konumunu girebiliriz:

TEMPLATE_DIRS = ('/home/Proj/App1/template'
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
)

Cevap gönderirken kullanacağımız html dosyasında “POST” metodunu kullanan bir form yerleştirmemiz gerekir. Bu form, kullanıcıdan  “gene_code” adındaki bölme aracılığı ile veri alacağı için adı ’gene_code’ olan input alanı içermelidir. Cevap aşamasında kullanıcıdan alıdğımız veriyi ekrana yansıtmak için bu veriyi öncelikle “genes” adındaki değişkene atayıp home.html'de yer alan “items” a aktaracağız.
Bütün bunları yaparak  küçük projemizi oluşturmuş oluruz. Projemizi çalıştırmak için öncelikle terminal aracılığı ile models.py dosyasında tanımladığımız veri modellerini  senkronize etmemiz gerekir.

$ python manage.py syncdb

Komutu ile database’ i senkronize edebiliriz. Burada dikkat etmeniz gereken çok önemli bir nokta var. Modelleriniz bir kere oluşturduktan sonra burada yapacağınız değişiklikleri senkronize etmek pek mümkün olmuyor. Yaptığınız değişikliklerin Django tarafından algılanmasını istiyorsanız

$ python manage.py flush App1

komutu ile bütün veri tabanınızı resetleyip tekarar senkronize etmeniz gerekir. Bu komut kaydettiğiniz bütün verilerin silinmesine sebep olacaktır. Bu yüzden proje oluşturma aşamasında veri modellerinizi güzelce düşündükten sonra tanımlamanız daha verimli olacaktır.
Veritabanını senkronize ettikten sonra

$ python manage.py runserver

Komutu ile sunucumuzu çalıştırıp terminalde belirtilen linkten sayfamızı açabiliriz.

Django'nun çalışma mantığını daha iyi oturtabilmek için oluşturduğumuz projeyi elimden geldiğince görselleştirmeye çalıştım. Umarım yararlı olmuştur. Bir sonraki yazımda tekrar görüşmek üzere:)




1 yorum:

  1. slm kardes cok guzel yazi olmus eline saglik. peki django illa pythonla mi yazmamiz lazim pehepe olmaz mi? ben pehepe biliyom da

    YanıtlaSil