Bölüm 03 : Görünümler ve URLConfs
Ceviz Viki sitesinden
Not : Bu kitap bölüm bölüm http://www.djangobook.com/en/2.0/ adresinden Türkçe'ye çevrilecektir.
- Bölüm 01 : Django ile tanışalım
- Bölüm 02 : Başlarken
- Bölüm 03 : Görünümler ve URLConfs
- Bölüm 04 : Şablonlar
- Bölüm 05 : Modeller
- Bölüm 06 : Django Admin Bölümü
- Bölüm 07 : Formlar
- Bölüm 08 : İleri Düzey Görünümler ve URLConfs
- Bölüm 09 : İleri Düzey Şablonlar
- Bölüm 10 : İleri Düzey Modeller
- Bölüm 11 : Genel Görünümler
- Bölüm 12 : Django'yu Yayınlamak
- Bölüm 13 : HTML Harici İçerik Üretimi
- Bölüm 14 : Oturumlar, Kullanıcılar ve Kayıt
- Bölüm 15 : Önbellek
- Bölüm 16 : django.contrib
- Bölüm 17 : Aracı Yazılım (Middleware)
- Bölüm 18 : Standart Veritabanı ve Uygulamalarla Entegrasyon
- Bölüm 19 : Uluslararasılaştırma (Internationalization)
- Bölüm 20 : Güvenlik
Konu başlıkları |
Bölüm 3: Görünümler ve URLconfs
Geçen bölümde, Django geliştirme sunucusu ile nasıl proje kurulacağını ve çalıştırılıcağını açıklamıştık. Bu bölümde, Django ile dinamik(hareketli) web siteleri oluşturmanın temellerini öğreneceksiniz.
İlk uygulamanız : Selam Dünya!
İlk hedefimiz, ünlü selam dünyası uygulamasını yaratmak.
Eğer web çatısı(framework) kullanmadan bir 'selam dünya' web sitesi yayınladıysanız, mümkün ki bir metin dosyasına 'selam dünya' yazmanız -buna selam.html diyelim- , ve onu 'www.sitemornek/selam.html' olarak yayınlamanız. Akılda tutmanız gereken 2 şey var; 'Selam Dünya!' bir metindi ve www.sitemornek.com/selam.html ise bir adres(url) idi.
Django ile, bu iki şeyi belirtebilirsiniz ama farklı yoldan. Sayfanın o 'Selam Dünya!' içeriği görünüm fonksiyonu ile, adresi(url) ise URLconf ile belirtilir. Ne duruyoruz, ilk selam dünya fonksiyonumuzu yazalım!
İlk Görünümüzüz
Geçen bölümde django-admin.py startproject ile yarattığımız mysite 'in dizininde bir dosya yaratalım adıda views.py olsun.
Bu Python modülü bu bölümdeki görünümlerimizi içericek.
Bunu aklınızdan çıkarmamanızı rica ederim burada views.py nin hiç bir özel yanı yok -bunu başka bir isimle de yaratabilirdik- sadece kodlarımızı okuyan başka biri için kolaylık olsun ve standartlaşması için views.py adıyla yarattık.
'Selam Dünya' görünümümüz basit. İşte views.py ve bazı modülleri içeri aktardık -onları içeri aktarmalısınız-.
from django.http import HttpResponse
def selam(request):
return HttpResponse("Selam Dunya")
Kodu satır satır açıklayalım:
- İlk olarak django modülünden http sınıfının HttpResponse fonksiyonunu içeri aktardık.
- Sonra ki adımda bir fonksiyon yaratıp adını 'selam' koyduk. (Bu fonksiyon 'request' parametresini alıcak)
- 'request' parametresine fazla takılmayın bu bize HTML dosyasından gelen bilgileri içeriyor.
- Bu mutlaka ilk parametremiz olmalı.
- Fonksiyonun ismi önemli değil. 'selam' değilde 'merhaba','naber' olabilirdi. Bu size kalmış.
- Son satırda fonksiyonumuz bir değer döndürüyor; return HttpResponse("Selam Dunya")
Burada request ile aldığımız veriyi HttpResponse ile işliyoruz. Akılda kalması için response yanıt anlamına gelir. Request ise rica,istemek anlamına.
Şöyle düşünebiliriz; Rica ederse,karşılık alır. Ve burada da karşılığımız "Selam Dunya".
İlk URLconf
Şu anda python manage.py runserver yazıp çalıştırırsanız Django'nun 'Welcome to Django' sayfasını görürsünüz. Sanki bizim yazdıklarımız etki etmemiştir?
Çünkü; biz Django'ya şu şu adres rica ederse şunu karşılık olarak ona sun demedik. Peki bunu nasıl Django'ya anlatacağız?
django-admin.py startproject ile proje oluşturduğumuzda urls.py otomatik olarak oluşur.
Varsayılan olarak şöyle birşeydir;
from django.conf.urls.defaults import *
# Uncomment the next two lines to enable the admin:
# from django.contrib import admin
# admin.autodiscover()
urlpatterns = patterns('',
# Example:
# (r'^mysite/', include('mysite.foo.urls')),
# Uncomment the admin/doc line below and add 'django.contrib.admindocs'
# to INSTALLED_APPS to enable admin documentation:
# (r'^admin/doc/', include('django.contrib.admindocs.urls')),
# Uncomment the next line to enable the admin:
# (r'^admin/', include(admin.site.urls)),
)
Varsayılan olarak bazı yorum satırlı kodlar içerir. Satır satır anlatmak gerekirse(yorum satırlarını es geçiyorum);
- from django.conf.urls.defaults import * kısmında bel kemiğimiz olan modülü içeri aktardık.
Fark ettiğiniz üzere dosyamız(urls.py) urlpatterns adlı değişkenimiz patterns adlı bir demet içeriyor.
Aklınızda kalması için, pattern demet anlamına gelir.
Ve yine fark ettiğiniz üzere patterns demetinin ilk elemanı bir boş metinsel ifade. Bunu 8. bölümde daha detaylı bir biçimde anlatacağım.
Sade bir görüntü olması için yorum satırlarını sildim.
from django.conf.urls.defaults import *
from mysite.views import selam
urlpatterns = patterns('',
('^selam/$', selam),
)
Bu kodun az çok ne yapıcağını kestiriyor olmalısınız.
Yine de açıklayayım;- mysite.views modülünden selam adlı fonksiyonu içeri aktarıyoruz. Evet bu o bizim yazdığımız fonksiyon!
- Ve Django'ya diyoruz ki Ey Django;
- 'selam' ile başlayıp biten bir adres girilirse adres çubuğuna, selam fonksiyonuna rica ediver.
Python yolu, bir Python programında 'import' kullandığınızda Python'un hangi dizinlere bakıcağı adreslerin listesidir.
Kısaca birşey 'import' ettiğinizde Python, Python Yolunuza bakıp o dosyayı içeri aktarır.
Örneğin şöyle bir programımız var;
from deneme import *
Ve python yolumuz ise şöyle;
['', '/usr/lib/python2.4/site-packages', '/home/username djcode'].
Python ilk olarak bulunduğunuz dizine bakıcaktır. Eğer orada bulamazsa /usr/lib/python2.4/site-packages/deneme.py dosyasını arar. Eğer onuda bulamazsa /home/username djcode/deneme.py dosyasını arar. Eğer yine bulamazsa hata verir.
Eğer Python Yolunu görmek isterseniz etkileşimli kabuğu açın ve aşağıdakileri yazın.
import sys print sys.path
Python yolu konusunda fazla düşünmeniz gerekmez, Python ve Django bunu sizin için halleder.
Bu konu en iyi bir örnekle açıklanabilir.
Eğer biz ^selam/$ yerine ^selam/ kullansaydık, bu selam/deneme, selam/merhaba/naber, selam/bla gibi adreslerde de çalışacaktı. ^selam/$ diyerek sadece /selam/ da çalışmasını sağladık.
Hadi değişikliklerimizin denemesini yapalım. Django'yu 2. bölümde yaptığımız gibi python manage.py runserver komutuyla çalıştıralım.
Çalışır halde bıraktıysanız önemli değil, Django otomatik olarak değişiklikleri algılar. Her değişimde yeniden başlatmanız gerekmez.
Projeniz http://127.0.0.1:8000 adresinde. Hadi ne duruyorsunuz tarayıcınızı açıp http://127.0.0.1:8000/selam yazın.
Veee, işte bu ilk Django Web sayfanızı yaptınız!
Düzenli ifadeler (yada regexes) metinleri desenlere göre biçimlendirmemizi sağlar. URLconfs düzenli ifadeleri adres eşleşmesinde kullanır. Muhtemelen genellikle bir kaç düzenli ifade sembolü kullanıcaksınız.
Düzenli ifade sembolleri ve eşleştikleri
| Sembol | Eşleştiği | |
| . (nokta) | Herhangi bir karakter (1 adet) ile eşleşir. | |
| \d | Herhangi bir tam sayı (1 adet) ile eşleşir. | |
| [A-Z] | A-Z arası bir karakter (Büyük harf,1 adet) ile eşleşir. | |
| [a-z] | a-z arası bir karakter (Küçük harf,1 adet) ile eşleşir. | |
| [A-Za-z] | A-Z arası bir karakter (büyüklük önemli değil, 1 adet) ile eşleşir. | |
| + | Bir veya daha fazla önceki sembol (örnek: \d+ => bir veya daha fazla sayı ile eşleşir ,78,4,345 gibi. | |
| [^/]+ | Bir veya daha fazla / ile başlamayan karakter ile eşleşir. | |
| ? | Ya hiç yada 1 tane anlamına gelir. Örneğin \d? hiç veya tek bir rakam ile eşleşir. | |
| Daha fazla bilgi için http://docs.python.org/library/re.html#re-syntax | ||
The Django Book Copyright 2006, 2007, 2008, 2009 Adrian Holovaty and Jacob Kaplan-Moss.
Django Kitabı Türkçe Çevirisi Copyright 2011 Yiğit Sadıç.
Bu sitede yayımlanan tüm yazılar ve Django Kitabı GNU GFDL lisansı altındadır.