Python Django ile Web Uygulaması Yapmak

python django logoHerkese merhaba, internet dünyasında içerikler kadar interneti oluşturan temel mekanizmalar da hızla değişiyor ve gelişiyor. Bu değişim hem donanımsal hem de yazılımsal anlamda birbirine paralel hareket ediyor. Biz yazılımcılar için bu hem bir avantaj hem de dezavantaj olabiliyor çünkü  hergün yeni çıkan araçları, framework’leri, kütüphaneleri, tasarım kalıplarını, standartları araştırmak istiyoruz, hızla gelişen bu dünyanın gerisinde kalmak istemiyoruz. Aslında bu araştırmalar sadece “hepsini bileyim” amacında değil çünkü faydalı olduğu kadar gereksiz diyebileceğimiz bir sürü yazılımsal çöp de üretiliyor bizler bu çöplüğü karıştırarak işimize yarayabilecek ya da en azından bize yeni bakış açısı sunabilecek bir şeyler bulmaya çalışıyoruz.

Bu makalede bir web programcısının işlerini gerçekten çok kolaylaştıran yeni sayamayacağımız kadar geçmişi olan Django kullanımı hakkında yeni başlayanlar için bilgiler vereceğim. İlk olarak 2005 yılında “Django Yazılım Vakfı” tarafından yazılan ve son kararlı sürümü 2016’da piyasaya çıkan Python programlama dili ile yazılmış olan ve hedefini “karmaşık bir yapıda olan ve bir veritabanı kullanan web uygulamalarının gerçekleştirimini kolaylaştırmak” olarak belirleyen bu web framework’ü kullanmaya başladığınızda sizler de çok seveceksiniz.
Kurulumu üzerine çok yoğunlaşmak istemiyorum zira internette bu konu hakkında bolca makale var. Yine de kısaca tarif etmek gerekirse Buradan Python geliştirme ortamını indirin. Kurulum bittikten sonra komut satırına “pip install django” yazarak kurulumun tamamlanmasını bekleyin. Bu işlemleri yapmak için windows üzerinde global değişkenlere python uygulaması eklenmiş olmalı ve pip modülü yüklenmiş olmalıdır

Yeni Proje Oluşturmak

Kurulum bittikten sonra komut satırına “django-admin.py startproject DenemeProje” yazın. Bu kod bulunduğunuz klasörde yeni bir django projesini hazır şablon ile oluşturur. Bu komutu kullanmadan da kendiniz bir proje klasörü oluşturabilirsiniz fakat bunun için dosyaları tek tek elle oluşturmanız gerekecektir. Bu komut ile Django projesinin çalışması için gerekli olan temel dosyalar otomatik olarak eklenir.  

python django

Settings.py dosyası isminden de anlaşılacağı üzere projenin ayarlarının yapıldığı dosyadır içerisinde varsayılan olarak “DATABASES” isimli bir değişken tanımlanmıştır bu ayar sqlite3 isimli modulü çağırır fakat sisteminize bu modül yüklü değilse hata verecektir şimdilik veritabanı işlemi yapmayacağımız için bunu yorum satırı haline getirin. Ardından Urls.py isimli dosyayı açıp aşağıdaki gibi düzenleyin. Bu dosya web uygulamanızın Url yönlendirmelerini yönettiğiniz ayarların bulunduğu dosyadır.

from django.conf.urls import url
from django.contrib import admin
from DenemeProje import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^helloworld/', views.hello_django),
]

“urlpatterns” değişkeni url-action eşleştirme ayarlarını dizi halinde tutar. Şimdi projenize varsayılan olarak eklenmeyen ama standartlara uygun olması için eklenecek olan views.py dosyasını ekleyin. Bunu Asp.Net MVC projesindeki controller-view ilişkisini yöneten dosya olarak düşünebilirsiniz.

# -*- coding: utf-8 -*-
from django.http import *
from django.shortcuts import render

def hello_django(request):
    return HttpResponse(u'Hello Django ')  

Buraya kadar yapılacakları başarıyla yaptıysanız en azından test edebileceğiniz bir Django web sayfası oluşturmuşsunuz demektir. Şimdi bunu nasıl bir sunucu olarak çalıştırıp tarayıcımızdan görebileceğimizi öğrenelim.
Aslında bu işi de Django bizim yerimize hallediyor tek yapmamız gereken projemizin olduğu dizinde komut satırını çalıştırmak ve şöyle bir komutu işletmek “manage.py runserver 127.0.0.1:8000
Bunu çalıştırdığınızda “http://127.0.0.1:8000/hello_django” adresine girdiğinizde web sayfanızı görebilirsiniz. Tarayıcınızdan test edebilirsiniz. her seferinde komut satırı ile uğraşmak istemiyorsanız bir BAT dosyası oluşturup içerisine bu komutu yazarak çift tıklama ile sunucunuzu başlatabilirsiniz.

python django server

Template Kullanımı

Gerçek bir websitesi tasarlamak için HTML ile Python komutlarını etkileşime geçirmelisiniz. Bunun için Django’da Templates kavramı vardır bunu MVC modelindeki View yapısına benzetebilirsiniz. Templates’leri kullanabilmek için proje klasörünüzün içine sablonlar isminde bir klasör daha açın ismini değiştirebilirsiniz. Ardından Settings.py dosyası içinde TEMPLATES ayarı içindeki DIRS değerini aşağıdaki gibi değiştirin. Bu şekilde sabit bir adres vermek yerine Root dizini projemizin çalıştığı dizin olarak belirliyoruz, bu ise projemizi taşıdığımızda veya başka bir bilgisayarda çalıştırdığımızda adresi değiştirme zorunluluğunu kaldırıyor.

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(os.path.dirname(__file__),'sablonlar')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

Sablonlar klasörüne index.html isminde bir html dosyası ekleyin ve içeriğini aşağıdaki gibi değiştirin. Django’da Html arasına python kodları yazılırken “{{ komut }}” şeklinde iki toplamda dört süslü parantez kullanılır bunlara Etiket denir. Template içerisinde uygulama geliştirirken ihtiyacınız olacak olan for, if gibi etiketleri kullanabilirsiniz bunların yanın kendi etiketlerinizi de oluşturabilirsiniz.

<!DOCTYPE html>
<html>
   <head>
     <title>Öğrenciler</title>
   </head>
   <body>
     <table border="1">
       <tr>
        <th>İsim</th><th>Soyisim</th><th>Bölüm</th><th>Puan</th>
       </tr>
       {% for ogr in ogrenciler %}
       <tr>
        <td>{{ogr.0}}</td>
        <td>{{ogr.1}}</td>
        <td>{{ogr.2}}</td>
        <td>{{ogr.3}}</td>
       </tr>
       {% endfor %}
    </table>
   </body>
</html>

Şimdi bu sayfayı Render etmek için Views.py dosyası içerisinde aşağıdaki gibi bir Action ekleyin.

def ogrenciler(request):
 ogrenciler = (
     ['Ahmet','Yılmaz','Psikoloji', 60],
     ['Mehmet','Coşkun','Matematik', 84],
     ['Cemal','Güngör','Kimya', 40]
 )
 return render(request,'ogrenciler.html',{'ogrenciler':ogrenciler})

Son olarak Urls.py dosyasına da “/ogrenciler” linki için url tanımlaması yapın ardından http://127.0.0.1:8000/ogrenciler/ adresine girdiğinizde aşağıdaki gibi bir sonuç görmelisiniz

Dinamik URL Kullanımı

Bir öğrencinin bilgisine ID değeri ile ulaşmak için Url tanımlamasında Düzenli ifadeler (Regular Expressions) kullanabilirsiniz.

from django.conf.urls import url
from django.contrib import admin
from DenemeProje import views

urlpatterns = [
    url(r'^ogrenciler/',views.ogrenciler),
    url(r'^ogrenci/([0-9]+)',views.ogrenci),
    url(r'^$',views.home),
]

Template ve Action yapısı aşağıdaki gibidir.

Ogrenci.html

<!DOCTYPE html>
<html>
   <head>
   <title>Öğrenci</title>
   </head>
   <body>
     ID: <b> {{ ogrenci.0 }} </b> <br/>
     İsim: <b> {{ ogrenci.1 }} </b> <br/>
     Soyisim: <b> {{ ogrenci.2 }} </b> <br/>
     Bölüm: <b> {{ ogrenci.3 }} </b> <br/>
     Puan: <b> {{ ogrenci.4 }} </b>
   </body>
</html>

Views.py

def ogrenci(request, id):
 ogrenciler = (
     [1, 'Ahmet','Yılmaz','Psikoloji', 60],
     [2, 'Mehmet','Coşkun','Matematik', 84],
     [3, 'Cemal','Güngör','Kimya', 40]
 )
 ogrenci = []
 for i in ogrenciler:
    if i[0] == int(id): ogrenci = i
 return render(request,'ogrenci.html',locals())

Sonuç:

Bu makalede Python Django ile yeni başlayanlar için basit bir web sayfası oluşturmayı açıkladım. Elbette Django çok güçlü ve sürekli geliştirilen bir web framework’tür. Bir çok kurumsal firma tarafından da aktif kullanılmaktadır. İlerleyen makalelerde vakit buldukça bir web uygulaması için vazgeçilmez olan Database, Querystring-Form, Cache, Session, Cookie, Security gibi konuları anlatmaya çalışacağım. Şimdilik bu kadar.

Umarım faydalı olmuştur.

Mustafa Tayyip YETİŞ
Yazılım Geliştirme Uzmanı / Elektronik Meraklısı

5.0 Ort. (100% puan) - 1 oy

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir