Register Now

Login


Lost Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Add question

You must login to ask question .

Login


Register Now

Merhaba, kayıt formu üzerinden kayıt olabilirsiniz. Fakat sosyal medya ile kayıt olmanızı önermekteyiz.

Django GET ve POST İşlemleri

Django GET ve POST İşlemleri

Burada yazan bilgiler Django Formların temelini oluşturacak bilgiler ve giriş niteliğinde bir yazı olacaktır. Django içerisinde from ve model bağlantısını daha sonra inceleyeceğiz.

GET ve POST

Web sitelerinde kullanıcıdan veri alma yöntemleri olarak GET ve POST sistemleri vardır. GET ile alınan veriler, adres satırın herşey gözükür ve boyutu yaklaşık 2KB civarıdır. POST ile yollanan veriler kullanıcıya gösterilmeden yollanan verilerdir. Tabi bu durumda en güvenli sistem “POST” metodu olarak geliyor fakat, GET’in de kullanılacağı konumlarda mevcuttur. GET genelde köprü işlerinde kullanılmaya müsaittir. Fakat veritabanı ile ilgili işlem yapiyorsanız “POST” metodu daha akıllıca davranış olacaktır. Çünkü tarayıcı üzerinden sisteme SQL komut yollabilir, tablolarınıza zarar verebilirler.

Django GET Yöntemi

  • Öncelikle views.py içerisine girip, GET için gerekli fonksiyonları yazalım.

  • if kontorolü ile, GET kontrolü sağladık eğer get verisi gelirse ve “?adi=ali&soyadi=yaman” şeklinde veri gelirse hemen değişkenlere depolanacak.
  • ad ve soyad değişkenlerine depolanan get verileri ekrana yazdıralacaktır. Kısaca bu şekilde.

 

  • Şimdi url.spy dosyamızı açalım ve urlmizi belirliyelim.

  • Sitemizi başlatalım ve tarayıcımıza şu şekilde girelim :

django get yontemi


Django POST Yöntemi

POST yöntemini “GET” gibi göstermemiz münkün değil, çünkü veriler yukarıdaki gibi gözükmez. POST yöntemini Şablon kullanarak göstermek zorundayız.

  • Sıfırdan tekrar proje açalım, yada yukarıda yazdıklarımızı silelim. Şimdi POST yöntemi için yazalım.
  • Şablonumuza “index.html” ekliyelim. İçerisine şunları yazalım :

  • Oluşan html sayfası, post için gerekli işlemler için yetersiz olacaktır, bir form yapısı oluşturmamız gerekiyor

  • action=”/” olarak belirtiğimiz yer post olacağı konumdur. Bulunduğu konuma post ediyoruz.
  • {% csrf_token %} yapısını görüyorsunuz, POST-GET güvenliği için yazmalıyız.
  • views.py içerisine girelim : POST’dan gelen verileri okumak için fonksiyon yazalım :

  • Yukarıdaki yapıyı incelediğimizde, eğer post verisi gelirse gelen verileri değişkene atiyor. Burada [‘ad’] yazan kısım html içerisindeki name değerleridir.

Sıra geldi urlimizi ekleyelim.

  • urls.py içerisine girelim :

  • Artık siteyi başlatabiliriz, ekran çıktısı şöyle olacaktır :

django post yontemi

  • ADI :  Ali ve Soyadı : Yaman yazıp yolluyorum ekran çıktımız şöyle olacaktır : 

django post yontemi


django post ve get

Umarım faydalı olmuştur 🙂

About Ali YamanProfesyonel

Herzaman bilginin gücüne inanlardan oldum , araştirmalarım ve deneyimlerimlerimi sizlere sunmayı amaçlıyorum. İstanbul Üniversitesi Kontrol ve Otomasyon Öğrencisiyim Elektronik ve Programlama ile ilgim var.

Follow Me

Comments ( 7 )

  1. Hocam views.py kısmını anlamadım. Önceden form.html’i kullanıcıya göstermeden nasıl değerleri aldık? Kaldı ki kendim yapmaya çalışınca “The view personal.views.post_deneme didn’t return an HttpResponse object. It returned None instead.” şeklinde bir uyarı alıyorum

    • Sanırım yanlış anlaşılma oldu. Html kodlarımız “index.html” tarafına yazdık. “Postyontemi” ve “Getyontemi” adlı fonksiyonları yazarak, urls.py’a çağırdık. Sorunuzu tam net anlayamadım. Biraz daha detaylandıırabilirseniz yardımcı olabilirim.

      • Biraz anlatması zor gerçekten, şunu kastediyorum. index.html’de bir form oluşturduk. Views.py’de de dedikki eğer form’dan post method’u ile bilgi geliyorsa index.html’i render et yani kullanıcıya göster. Yani benim anladığım index.html’i kullanıcının görmesi için post methodundan bilgi gelmesi gerekiyor ama kullanıcının post methodundan bilgi göndermesi için ise index.html’i görmesi gerekiyor. Bu nedenle de ben aynı kodları yazıp sitemde o adrese gittiğimde yukarıda belirttiğim hatayla karşılaşıyorum. Ben mi bir yerde hata yapıyorum? Nerede hata yapıyor olabilirim?

        • Kodları paylaşırken, grintilerde sorun olmuş. Şimdi düzeltim, kısaca şöyle açıklayayım ;

          1-) Eğer get veya post metodu gelmesse “render” sürekli çalışip index.html’i göstericektir. Yani if koşuluna bağlı çalışmayacaktır. http://prntscr.com/d3sg71 linke bakarsan eğer, demek istediğim netleşebilir.
          2-) Eğer get veya post metodu gelirse, if koşuluna takılıp gerekli değişkenler “local()” tarafından yollanacaktır.

          + Umarım olay aydılanmıştır. Bu arada iligine teşekkür ederim sayende kodları düzelttim 🙂

          • Bu güzel tutoriallar için ben teşekkür ederim. Keşke daha çok kişi sitenizin farkına varabilse… Umarım Django tutoriallarınız devam eder. İngilizce tutorialları daha çok tercih etsem de elimin altında bir Türkçe tutorial olması çok hoşuma gidiyor.

          • Güzel yorumlarınız için teşekkür ederim. Umarım zamanla olacaktır inşallah. Sizide aramızda görmek isteriz, django çalışırken notlarınızı paylaşabilirsiniz.
            İlgili kayıt sayfası : http://www.python.tc/wp-login.php?action=register

  2. Merhaba – ilk olarak, benim hatalarım için özür dilerim! Ben Django’nın takımın bir parçasıyım. Şimdi Türkçe öğreniyorum, ama sadece bil yıldır. Türkçe Django kaynaklarıyla ilgileniyorum, ve sizin faydalı
    makaleniz buldum. Benim için, bu hem Türkçe seviyemi ilerlemek için hem de Türkiyedeki Django’yu kullanıcılarla bağlantı kurmak için bir fırsat.

    Fakat, GET ve POST yöntemlerinin arasında çok önemli bahsetmediğiniz bir fark var. Aslında en önemli fark şu: GET yöntemi kullandığımız zaman, “yan etkiler” yasaktır. Yani, eğer websitesi veriyle bir mesaj gönderecekse (örneğin), ya da veritabanında veriyi koyacaksa, falan filan, POST yöntemini kullanmaya mecbur, çünkü bu şeyler “yan etkiler” sayılır. Öte yanda, eğer yan etkiler olmayacaksa, mesela form ile kişiler sadece bir şey arayabilirler, GET yöntemini kullanabiliriz. GET yöntemini kullandığımız zaman, kalıcı etkiler yapmamak zorunda.

    https://tools.ietf.org/html/rfc2616#section-9.1.1 (çevirisini bulamadım, maalesef).

    Bu çok önemli, yoksa güvenlik problemleri çıkabilir. Mesela, Django’nın CSRF koruma sistemi sadece POST yöntemini korur ( https://docs.djangoproject.com/en/dev/ref/csrf/ ), çünkü GET yöntemi “güvenli” olmalı, GET yöntemini korumamız lazım olmamalı.

    Ayrıca, GET doğru olarak kullandığımız zaman, URL’de her şey olduğu için, başka kişilerle sonuçlar paylaşabiliriz. Mesela, Twitter’le den “Django Turkiye” ararken, GET yöntemini kullaniyor, ve URL oluyor. Bu doğru, çünkü bu sadece arama işlemi, gerçek yan etkiler yok. Ve şimdi, sizle sonuçlar kolayca paylaşabilirim.

    Çok teşekkürler!

Leave a reply

Captcha Click on image to update the captcha .