5 Nisan 2014 Cumartesi

Formların Görünümler ile Kullanılması

Gelelim asıl meselemize. Formu Django imkanlarından yararlanarak basit bir şekilde oluşturduk. Şimdi bunu görünümlerde kullanarak kullanıcıya göstermemiz gerekiyor. Daha önceden yaptığımız veritabanına Doktor ekleme işlemini artık Django Formlarını kullanarak yapalım.
İlk önce görünümü oluşturalım.
from yonetim.forms import *
def doktor_ekleme(request):
 if request.method == "POST":
  form = DoktorFormu(request.POST)
  if form.is_valid():
   temiz_degerler = form.cleaned_data
   doktor = Doktor(adi=temiz_degerler['adi'],soyadi=temiz_degerler['soyadi'],
       telefon=temiz_degerler.get('telefon'),eposta=temiz_degerler.get('eposta'))
   doktor.save()
   return HttpResponseRedirect('/doktorlar/')
  else:
   return render_to_response('form.html',{'form':form,'baslik':'Doktor Ekleme'},context_instance = RequestContext(request))
 else:
  form = DoktorFormu()
  return render_to_response('form.html',{'form':form,'baslik':'Doktor Ekleme'},context_instance = RequestContext(request))
Burada eğer Post edilmiş ise işlem yapıyoruz edilmemişse formu form.html şablonuna yönlendiriyoruz.
form = DoktorFormu(request.POST) satırı ile formdan gelen verileri doğrudan oluşturduğumuz DoktorFormu sınıfına yolluyoruz.
is?valid() ile kontrol ediyoruz eğer herhangi bir sıkıntı yoksa veritabanına kaydediyoruz. Girilen değerler de problem varsa tekrardan form sayfasına yönlendiriyoruz.
temiz_degerler = form.cleaned_data satırı ile gelen verileri güvenlik için temizledik ve temizlediğimiz değerler üzerinden işlem yaptık.
Zorunlu olmayan verileri temiz_degerler.get('telefon') şeklinde aldık. Eğer bu şekilde değilde doğrudan alırsak kullanıcı alanları doldurmazsa hata ile karşılaşırız. Bunu engellemek için bu şekilde kulandık.
Şimdi genel bir form tasarlayalım. yonetim/sablonlar içerisine form.html adında şablon oluşturuyoruz.
<!DOCTYPE html>
<html>
<head>
    <title>{{ baslik }}</title>
     <link rel="stylesheet" type="text/css" href="/static/base.css">
</head>
<body>
<h1>{{ baslik }}</h1>
{% if form.errors %}
    <span style="color: red">
        Hataları düzeltin :
    </span>
{% endif %}

<form method="POST">
    {% csrf_token %}
    <table border="1">
            {{ form }}
     <tr><td></td><td><input type="submit" value="Gönder" /></td></tr>
    </table>

</form>


</body>
</html>
Gördüğünüz gibi gönderdiğimiz formu doğrudan yazdırdık. Eğer bir hata varsa kontrolünü forms.error ile yakalayarak kullanıcıyı uyardık. Eğer kullanıcı verileri yanlış doldurarak gönderirse şu şekilde bir çıktı ile karşılaşacak.
Django formu oluştururken etiketleri alan isimlerine göre kendisi belirliyor. Biz istersek kendi etiketlerimiz oluşuturabiliriz. Bunun için DoktorFormu sınıfını değiştirelim.
class DoktorFormu(forms.Form):
 adi  =  forms.CharField(label="Adınız")
 soyadi  =  forms.CharField(label="Soyadınız")
 telefon =  forms.CharField(label = "Telefon Numaranız:",required=False)
 eposta  = forms.EmailField(label="E-Posta Adresiniz",required=False)
Sayfayı yenilediğiniz zaman kendi etiketlerinizi göreceksiniz. Hataları alan üstlerinde göstermek pek hoş olmadı bunun için şablonu biraz daha değiştirelim ve hataları yanında gösterelim.
<!DOCTYPE html>
<html>
<head>
    <title>{{ baslik }}</title>
     <link rel="stylesheet" type="text/css" href="/static/base.css">
</head>
<body>
<h1>{{ baslik }}</h1>
{% if form.errors %}
    <span style="color: red">
        Hataları düzeltin :
    </span>
{% endif %}

<form method="POST">
    {% csrf_token %}
    <table border="1">

        {% for f in form %}
            {% if f.errors %}<tr >{%else %}<tr>{% endif %}
            <th>{{ f.label }}</th>
            <th>{{ f }}</th>
            {% if f.errors %}<td style="color: red">{{ f.errors }}</td>{% endif %}
            </tr>
        {% endfor %}

     <tr><td></td><td><input type="submit" value="Gönder" /></td></tr>
    </table>

</form>


</body>
</html>
Burada alanları tek tek yazdırdık. Eğer o alanda bir problem varsa yanına yeni bir sütün daha ekleyerek hatayı gösterdik. Çıktımız şu şekilde olacak.
Bu işlem bu kadar. Şimdi küçük bir bilgi verelim. Elimizde bulunan bir form nesnesini istediğimiz bir başka nesneye dönüştürebilmek için widget özelliğini kullanabiliriz.
class DoktorFormu(forms.Form):
 adi  =  forms.CharField(label="Adınız")
 soyadi  =  forms.CharField(label="Soyadınız")
 telefon =  forms.CharField(label = "Telefon Numaranız:",required=False)
 eposta  = forms.EmailField(label="E-Posta Adresiniz",required=False)
 mesaj =  forms.CharField(widget=forms.Textarea)
Bu şekilde değiştirdikten sonra form içerisinde bir textarea nesnesi göreceksiniz.
Kaynakça

0 yorum :

Yorum Gönder