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

in #utopian-io8 years ago (edited)

Hi guys, In this article I write more python code to tell you how to make your views file more functional. I will start with a simple function logic and try to explain the http requests and the returned answers by exemplifying to you.

Views Dosyamız

Evet arkadaşlar ilk olarak sizlere views dosyamızın içeriği ve buradaki fonksiyonların nasıl işlevleri olduklarından bahsedeyim. Fonksiyonlar genelde 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 olabilirken, gerçekten de bir nesne yada veritabanı işlevi de görüntüleyebilir. Görünümün kendisi, bu yanıtı geri getirmek için gerekli tüm koşulları sağlıyor. Bu kod, istediğiniz yere Python yolunuzda olduğu sürece yaşayabilir. Başka bir gereklilik yok sadece views'a fonksiyonumuzu yazmak yeterli olacaktır.

Örnek bir fonksiyon yazalım hemen;

from django.http import HttpResponse
def fonksiyon_adı(request):
return HttpResponse("Merhaba Dünya")

edited from imagesource

Gelen HTTP isteğini ilk olarak urls dosyası karşılıyor, sonra urls dosyası kendisi için tanımlanmış olan views fonksiyonunu çağırarak, fonksiyonun request parametresini dolduruyor. Sonra fonksiyon işlevini tamamlayıp, geriye döndüreceği cevabı şablona yada direk sayfaya basarak görevini tamamlıyor.

Peki bu geriye döndürülen cevap ve isteklerde neler var şimdi beraber onlara bakalım.

İstek ve Cevap Nesneleri

HttpResponse

Tipik kullanım, sayfanın içeriğini bir dize olarak HttpResponse yapıcısına iletmektir.

from django.http import HttpResponse
response = HttpResponse("web sayfasında gözükecek yazı diyebiliriz")
response = HttpResponse("Sadece metin yazısı", content_type="text/plain")
response = HttpResponse()
response['Yas'] = 120
del response['Yas']
response = HttpResponse()
response.write("<p>Paragraf yazabiliriz</p>")
response.write("<p>Bir paragraf daha ekleyebiliriz istersek</p>")

Evet arkadaşlar görmüş olduğunuz üzere düz metin olarak cevap verebildiğimiz gibi, bir dosya ile yada bir paragraf ile de bu cevabı doldurabiliyoruz.

JsonResponse

Eğer istersek json objesi olarak da cevap dönebiliyoruz. Hemen kod ile örnekleyelim. Öncesinde tabiki de JsonResponse döndürebilmek için bu kütüphaneyi kodumuzun başına import ederek eklememiz gerekiyor ki hata mesajı almayalım.

from django.http import JsonResponse
response = JsonResponse({'anahtar': 'icerik'})
response.content
b'{"anahtar": "icerik"}'
response = JsonResponse([1, 2, 3], safe=False)
response = JsonResponse(data, encoder=MyJSONEncoder)

FileResponse

Evet arkadaşlar json, http olduğu gibi dosya olarak da cevap verebiliyoruz. İstediğimiz bir dosyayı görüntülenmek istenilen sayfa açılırken cevap olarak basıp, direk kullanıcıya dosyayı indirme şansı yada okuma şansı verebiliyoruz. Bunu da hemen kod ile örnekleyelim isterseniz.

Tabi burada da yine django.http kütüphanesinden yada modülünden de diyebiliriz FileResponse u import edip kod satırımızın en üstüne eklemez isek kodumuz hata verecektir. Lütfen dikkat edelim.

from django.http import FileResponse
response = FileResponse(open('myfile.png', 'rb'))

Evet arkadaşlar cevap nesneleri incelediğimize göre şimdi biraz daha önem arz eden istek nesnesine geçelim. Request nesnesi ile bizim sayfamızı ziyaret eden kullanıcıdan bir çok şeyi alıp kontrol edebiliyoruz. Bunları bir kaç başlık ile özetlemek gerekirse, önce nelerolduklarına gelin beraber bakalım.

HttpRequest

  • HttpRequest.method: Burada iki farklı method bizi karşılıyor, bunlardan biri get diğeri ise post methodu. Bu değişken bizim için çok önem arz ediyor, çünkü biz bir sayfada işlem yaptırmak istediğimizde, başka bir sayfaya yönlendiriyorsak kullanıcıyı, yada sayfamızdaki bir formu onaylayıp kendisi gönder tarzı bir butona basıp, sayfadaki verilerin kaydedilmesini istiyorsa bu sırada kullanıcının yaptığı işlemi request.method Post mu? diyerek yakalıyoruz. Çünkü eğer sayfada kullanıcı verilerini kaydetmek için kaydete bastıysa bizim bu post etme işlemini yakalayıp arka tarafta kullanıcı post etti sayfayı deyip veritabanı işlemlerimizi başlatacak fonksiyona yada kontrollere yönlendirmemiz gerekecek kullanıcıyı. Hemen kod ile örnekleyelim.
if request.method == 'GET':
   # sayfa ilk defa görüntüleniyor, şablonu return yap diyebiliriz
   return ("kullanici-kayit.html")
elif request.method == 'POST':
    # sayfada post işlemi gerçekleşti veritabanı işlemlerine başlayabiliriz
    kullanıcı.save() 
    return ("basarili-kayit.html")
  • Http.request.user: Request nesnesi ile sayfamızı ziyareteden kullanıcının giriş yapıp yapmadığını anlayabiliyoruz. Bu sayede şablonumuzda giriş yapmış kullanıcının görebileceği alanlar ile giriş yapmamış kullanıcının görebileceği alanları kolayca ayırabiliyoruz. Giriş yapmış kullanıcının kim olduğunu da görebiliyoruz. Aksi takdirde birden falza html dosyası hazırlamamız gerekecek bunlar için. Hemen kod ile örnekleyelim.
if request.user.is_authenticated():
    # Giris yapmis kullanici
else:
    # Giris yapmamis kullanici

Evet arkadaşlar tabiki de kütüphane içerisinde request.user dan sonrasında dahi çok fazlasıyla farklı parametre var, bunlardan işimize en çok yarayacak olanları sizler için anlattım. Bir sonraki yazımda görüşmek dileğiyle, hoşçakalınız.



Posted on Utopian.io - Rewarding Open Source Contributors

Sort:  

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

Thank you for the contribution. It has been approved.

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

Coin Marketplace

STEEM 0.04
TRX 0.33
JST 0.080
BTC 62544.99
ETH 1664.38
USDT 1.00
SBD 0.42