Turkish Django Tutorial - We Need More Python for Views #2

in #utopian-io7 years ago (edited)

Hi guys, This tutorial about django web framework. I will tell you in this part, views, responses, HttpResponses, Error handling, Error types, django debug mode, and how can we write own error handling function.

Turkish Django Tutorial - We Need More Python for Views #1

Bir görüntüleme fonksiyonu veya kısaca görüntüleme, yalnızca bir Web isteği alan ve bir Web yanıtını döndüren bir Python işlevidir. Bu yanıt, bir Web sayfasının HTML içeriği veya yönlendirme, bir 404 hatası veya bir XML belgesi veya bir resim olabilir. Görünümün kendisi, bu yanıtı geri döndürmekle görevlidir arkadaşlar. Bu yazımda sizlere hataları yakalama ve hata türlerinden bahsedeceğim.

Öncelikle örnek bir view fonksiyonu ile bir hatırlatma yapalım beraber.

from django.http import HttpResponse
import datetime
def anlik_zaman_bilgisi(request):
    suan = datetime.datetime.now()
    html = "<html><body>Anlık zaman bilgisini göreceksiniz suan %s.</body></html>" % suan 
    return HttpResponse(html)
  • İlk olarak, HttpResponse'u django.http modülünden Python'ın datetime kütüphanesine aktarıyoruz.
  • Sonra, anlik_zaman_bilgisi isimli bir fonksiyon tanımlıyoruz. Bu, görüntüleme fonksiyonu. Her görünüm fonksiyonu, tipik olarak, istek olarak adlandırılan bir HttpRequest nesnesi alır.
  • Görünüm işlevinin adının önemli olmadığını unutmayalım arkadaşlar; Django'nun onu tanıması için belirli bir şekilde adlandırılması gerekmez. Buraya anlik_zaman_bilgisi diyoruz çünkü bu ad ne yaptığını açıkça gösterecek ve geri döndüğümüzde çok daha kolayca yazdığımız kodu anlayabilecek ve geliştirme fırsatına sahip olacağız.
  • Görünüm, oluşturulan yanıtı içeren bir HttpResponse nesnesi döndürecek bize. Her görüntüleme işlevi, bir HttpResponse nesnesinin döndürülmesinden sorumludur. (İstisnalar vardır, ancak bunlara sonradan değineceğiz arkadaşlar.)

Django'nun Zaman Dilimi

Django, Amerika / Chicago'ya varsayılan bir TIME_ZONE ayarı içeriyor. Bu muhtemelen yaşadığınız yer değil, bu yüzden ayar dosyanızda değiştirmek isteyebilirsiniz. Türkiye olarak değiştirmezseniz şayet saatiniz farklı gözükecektir arkadaşlar, fonksiyonun çıktısı neden farklı diye düşünmeyin diye önemli bir hatırlatma yapmak istedim. Time zone bilgisini değiştirmek için settings "ayar" dosyasına gitmeniz yeterli olacaktır.

URL'leri görünümlere eşleme

Şöyle bir durum var, bu görünüm işlevi yani fonksiyonumuz, geçerli tarih ve saati içeren bir HTML sayfası döndürecek. Bu görünümü belirli bir URL'de görüntülemek için bir URLconf oluşturmanız gerekir, yani bu cevabı görebileceğimiz bir url adresi belirlersek direk olarak bu yazmış olduğumuz fonksiyona erişebiliriz arkadaşlar.

Geri dönen hatalar

Django'da HTTP hata kodları HttpResponse alt sınıflarında yer alır arkadaşlar, yaygın HTTP durum kodları için tümü bulunmaktadır. Bir hatayı belirtmek için normal bir HttpResponse nesnesi yerine bu alt sınıflardan birinin bir örneğini kullanacağız.

from django.http import HttpResponse, HttpResponseNotFound

Özet olarak hataların aslında çoğu belirli bir if else yapısında gerçekleşiyor arka planda, aynı şu şekilde;

def fonksiyonumuz(request):
    if foo:
        return HttpResponseNotFound('<h1>Sayfa Bulunamadı</h1>')
    else:
        return HttpResponse('<h1>Sayfa Bulundu</h1>')

Her olası HTTP yanıt kodu için özel bir alt sınıf yoktur, çünkü bunların bir çoğu ortak olmayacaktır. Bununla birlikte, HttpResponse belgelerinde anlatıldığı gibi, HTTP durum kodunu istediğiniz gibi herhangi bir durum kodu için, bir dönüş sınıfı oluşturmak tarzında HttpResponse yapıcısına da iletebilirsiniz. Örneğin:

from django.http import HttpResponse
def test_fonksiyonumuz(request):
    # Geri döndürecegimiz deger (201) cevap kodu olsun.
    return HttpResponse(status=201)

404 Hatası


imagesource

HttpResponseNotFound gibi bir hata döndürdüğünüzde, ortaya çıkan hata sayfasının HTML dosyasını tanımlamaktan biz sorumluyuz arkadaşlar, aksi takdirde djangonun standart hata sayfası kullanıcıya gösterilir ve bu uygulamamız için bir güvenlik açığı oluşturur. Bundan kaçınmak için olası hata durumlarınının tümünü ön görüp önceden bu hata sayfalarını oluşturmalıyız.

HttpResponseNotFound ('<h1> Sayfa bulunamadı </ h1>')

Kolaylık sağlamak için ve sitenizde tutarlı bir 404 hata sayfası olması iyi bir fikir olduğundan, Django bir Http404 yakalayıcı sağlar. Http404'ü bir görünüm işlevinin herhangi bir noktasında kullanabiliriz, Django bizim için bunu yakalar ve uygulamamızın standart hata sayfasını bir HTTP hata kodu yani 404 ile birlikte döndürür. Debug yaparken bu işimize yarayacaktır ama dediğim gibi projemiz canlıya geçtiğinde bu sayfaları kullanıcılara göstermemek gerekir güvenlik önlemi olarak aklımızda bulunsun mutlaka. Hadi örnekleyelim;

from django.http import Http404
from django.shortcuts import render
from uygulama_adi.models import SinifAdi
def detay_fonksiyonumuz(request, nesne_id):
    try:
        p = SinifAdi.objects.get(pk=nesne_id)
    except SinifAdi.DoesNotExist:
        raise Http404("Nesne Bulunamadi")
    return render(request, 'uygulama_adi/detay_sayfasi.html', {'nesne': p})

Django 404 döndürdüğünde özelleştirilmiş HTML dosyamızı yani kendi yarattığımız dosyayı göstermek için, 404.html adında bir HTML şablonu oluşturabilir ve şablon ağacınızın en üstüne yerleştirebilirsiniz. Bu şablon daha sonra DEBUG modundan çıkıldığında sunulacak olan bir html olacaktır.

Django projemiz DEBUG modunda iken, Http404'e bir ileti gönderebilirsiniz ve standart 404 hata ayıklama şablonunda görünür. Bu mesajları hata ayıklama amacıyla kullanın; genellikle 404 şablonunda kullanım için uygun değildir. Çünkü hataları görmenizi engelleyecektir yarattığınız şablon.

Hataları Yakalamak İçin Kişisel Özelleştirmenizi Yapabilirsiniz

Django'daki varsayılan hata görünümleri çoğu Web uygulaması için yeterlidir, ancak herhangi bir özel davranışı istiyorsanız kolayca geçersiz kılabilirsiniz, yani var olanı yazdığımız kod ile ezebiliriz. Kodlama camiasında ezmek diye tabir ediliyor bu kavram. İşleyicileri URLconf'unuzda aşağıda görüldüğü gibi belirtmeniz yeterlidir (başka hiçbir yerde ayarlanmanızın hiçbir etkisi olmayacaktır).

Page_not_found () görünümü handler404 tarafından geçersiz kılınmıştır:

handler404 = 'uygulama_adi.views.benim_kisisel_sayfa_bulunamadi_hata_fonksiyonum'

Handler500 tarafından server_error () görünümü geçersiz kılınmıştır:

handler500 = 'uygulama_adi.views.benim_kisisel_hata_yakalama_fonksiyonum'

Permission_denied () görünümü handler403 tarafından geçersiz kılınmıştır:

handler403 = 'uygulama_adi.views.benim_kisisel_izin_reddedildi_fonksiyonum'

Bad_request () görünümü handler400 tarafından geçersiz kılınmıştır:

handler400 = 'uygulama_adi.views.benim_kisisel_kotu_istek_fonksiyonum'

Hata Türlerini yada Cevapları Genel Olarak Özetleyelim.

1 ile başlayan cevaplar genel olarak bilgi vermek için kullanılır. Devam etme yada anahtarlama protokolleri gibi içeriklerden oluşur.

2 İle başlayan cevaplar başarı mesajları içerir. Başarılı, onaylandı, yetersiz bilgi, içerik yok tarzında başarı mesajlarıdır.

3 ile başlayan cevaplar yönlendirme bilgisi içerir, bunlar, kalıcı taşındı, geçici taşındı yada güncellenemedi gibi.

4 ile başlayan cevaplar işlemci hatalarını kapsar, sayfa bulunamadı, erişim izni olmaan sayfa gibi.

5 ile başlayan cevaplar sunucu hatalarını kapsar, genellikle çökme yada sunucunun cevap vermediği durumlarda bu hata mesajları alınır.

Evet arkadaşlar bu kadar kolay bir şekilde hataları django içerisinde yönetebilir, uygulayabilir, kendi hata sayfalarımıza yönlendirebilir, debug modu ile oynayarak gerçek hatayı kullanıcıdan gizleyip, yarattıklarımızı görmelerini sağlayabilir ve güvenliğimizi koruyabiliriz. Umarım faydalı bir yazı olmuştur. Bir sonraki yazımda görüşmek üzere.


imagesource



Posted on Utopian.io - Rewarding Open Source Contributors

Sort:  

Güzel bir yazı olmuş tebrik ediyorum takipteyim devamını :)

Thank you for the contribution. It has been approved.

You can contact us on Discord.
[utopian-moderator]

Hey @dogancankilment I am @utopian-io. I have just upvoted you!

Achievements

  • You have less than 500 followers. Just gave you a gift to help you succeed!
  • Seems like you contribute quite often. AMAZING!

Suggestions

  • Contribute more often to get higher and higher rewards. I wish to see you often!
  • Work on your followers to increase the votes/rewards. I follow what humans do and my vote is mainly based on that. Good luck!

Get Noticed!

  • Did you know project owners can manually vote with their own voting power or by voting power delegated to their projects? Ask the project owner to review your contributions!

Community-Driven Witness!

I am the first and only Steem Community-Driven Witness. Participate on Discord. Lets GROW TOGETHER!

mooncryption-utopian-witness-gif

Up-vote this comment to grow my power and help Open Source contributions like this one. Want to chat? Join me on Discord https://discord.gg/Pc8HG9x

Coin Marketplace

STEEM 0.18
TRX 0.16
JST 0.030
BTC 64834.92
ETH 2540.16
USDT 1.00
SBD 2.67