Django URL'leri
İlk web sayfamızı yapmak üzereyiz: blogunuzun anasayfası! Ama önce, biraz Django url'lerini öğrenmeye başlayalım.
URL nedir?
URL basitçe bir web adresidir. Her defasında bir web sitesini ziyaret ettiğinde bir URL görürsün. Tarayıcının adres çubuğunda görünmektedir. (Evet! 127.0.0.1:8000
bir URL'dir! Ve https://djangogirls.org
da bir URL'dir)
İnternetteki her sayfanın kendi URL'si olması gerekir. Böylelikle bir URL açıldığında uygulama ne göstermesi gerektiğini bilir. Django'da URLconf
(URL konfigürasyonu) denilen bir şey kullanıyoruz. URLconf Django'nun doğru viewı bulmak için istenen URL ile eşleştirmeyi deneyeceği desenler dizinidir.
URL'ler Django'da nasıl çalışır?
Kod editörümüzde mysite/urls.py
dosyasını açalım ve neye benzediğine bakalım:
mysite/urls.py
"""mysite URL Configuration
[...]
"""
from django.urls import path, include
from django.contrib import admin
urlpatterns = [
path('admin/', admin.site.urls),
]
Gördüğünüz gibi Django bu dosyaya bizim için bir şeyler koymuş bile.
Üçlü tırnaklar ('''
or """
) arasındaki satırlara docstrings denir - bunları bir dosyanın, sınıfın ya da metodun en üstüne ne yaptıklarını anlatmak için yazabilirsiniz. Python bunları çalıştırmaz.
Önceki bölümde gördüğümüz yönetici URL'si burada:
mysite/urls.py
path('admin/', admin.site.urls),
Bu satırın anlamı Django, admin
ile başlayan her URL için ona uyan bir view bulur demektir. Bu durumda bir sürü yönetici URL'lerini ekliyoruz, böylece hepsi bu küçük dosyanın içinde sıkıştırılmış bir şekilde durmuyor -- bu hali daha okunabilir ve düzenli.
İlk Django URL'iniz!
İlk URL'mizi oluşturma zamanı. 'http://127.0.0.1:8000/' adresinin bloğumuzun anasayfası olmasını ve gönderilerin bir listesini görüntülemesini istiyoruz.
Aynı zamanda mysite/urls.py
dosyasını temiz tutmak istiyoruz, bu yüzden blog
uygulamamızdan mysite/urls.py
ana dosyamıza URL'leri aktarıyoruz (import).
Devam edip, blog.urls
'i import edecek bir satır ekleyelim. Ayrıca, ilk satırı değiştirmelisiniz çünkü burada include
fonksiyonunu kullanıyoruz, bu yüzden bu içe aktarmayı (import) satırlara eklemeniz gerekecek.
mysite/urls.py
dosyamız şöyle olmalı:
mysite/urls.py
from django.urls import path, include
from django.contrib import admin
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('blog.urls')),
]
Django artık 'http://127.0.0.1:8000/' adresine gelen her şeyi blog.urls
'e yönlendirecek ve oradaki yönergelere bakacak.
blog.urls
blog
dizini içinde urls.py
adında yeni bir boş dosya oluşturalım ve kod editöründe açalım. Tamam! Şu ilk iki satırı ekleyelim:
blog/urls.py
from django.urls import path
from . import views
Burada blog
uygulamasından Django'nun path
fonksiyonunu ve bütün views
fonksiyonlarını dahil ediyoruz (import). (Şu an hiç url'imiz yok ama birazdan olacak!)
Bundan sonra ilk URL kalıbımızı ekleyebiliriz:
blog/urls.py
urlpatterns = [
path('', views.post_list, name='post_list'),
]
Gördüğünüz üzere, ana URL'e post_list
adında bir view
atıyoruz. Django URL resolver ful URL'in başındaki domain adını (yani, http://127.0.0.1:8000 /) göz ardı eder, böylece bu URL kalıbı (pattern) boş bir string ile eşleşecek. Bu kalıp, Django'ya eğer siteye biri 'http://127.0.0.1:8000/' adresinden gelirse gitmesi gereken yerin views.post_list
olduğunu söylüyor.
Son kısım name='post_list'
, görünümü (view) tanımlamak için kullanılan URL'in adıdır. Bu view'un adı ile aynı olabilir ama tamamen farklı bir şey de olabilir. Bundan sonra projede isimlendirilmiş URL'leri kullanıyor olacağız, bu yüzden uygulamadaki her URL'i isimlendirmek önemli. Aynı zamanda URL isimlerini eşsiz ve kolay hatırlanabilir şekilde seçmeliyiz.
Eğer şimdi http://127.0.0.1:8000/ adresine gitmeyi denerseniz, 'sayfanıza ulaşılamıyor' tarzında bir mesaj görürsünüz. Bunun nedeni sunucunun (runserver
yazdığınızı hatırlıyor musunuz?) artık çalışmıyor olması. Sebebini bulmak için sunucunuzdaki komut penceresine bakın.
Konsolunuz bir hata gösteriyor, ama endişelenmeyin -aslında bu oldukça kullanışlı: bize 'post_list' özelliği yok diyor. Bu Django'nun bulup kullanmaya çalıştığı view'ın adı. Ama onu henüz oluşturmadık. Bu aşamada /admin/
de çalışmayacaktır. Hiç merak etmeyin, oraya geleceğiz. Farklı bir hata görürseniz, web sunucunuzu yeniden başlatmayı deneyin. Komut satırına girin, konsol ekraninda Ctrl+C (Control ve C tuşlarına beraber) basarak sunucuyu durdurun ve python manage.py runserver
komutunu çalıştırarak yeniden başlatın.
Django URLconfs ile ilgili daha fazla bilgi edinmek istiyorsanız resmi Django dokümantasyonuna bakabilirsiniz: https://docs.djangoproject.com/en/2.0/topics/http/urls/