Django - Form İşleme
Django'da formlar oluşturmak, bir model oluşturmaya gerçekten benzer. Burada da yine Django sınıfından miras almamız gerekiyor ve sınıf özellikleri form alanları olacak. Ekleyelimforms.pyuygulama formlarımızı içermek için myapp klasöründeki dosya. Bir giriş formu oluşturacağız.
myapp/forms.py
#-*- coding: utf-8 -*-
from django import forms
class LoginForm(forms.Form):
user = forms.CharField(max_length = 100)
password = forms.CharField(widget = forms.PasswordInput())
Yukarıda görüldüğü gibi, alan türü html oluşturma için "widget" argümanını alabilir; bizim durumumuzda, şifrenin görünmemesini, gizlenmesini istiyoruz. Django'da birçok başka pencere öğesi mevcuttur:DateInput tarihler için CheckboxInput onay kutuları vb. için
Formu Görünümde Kullanma
GET ve POST olmak üzere iki tür HTTP isteği vardır. Django'da, görünümünüze parametre olarak iletilen istek nesnesi, isteğin türünün ayarlandığı ve POST aracılığıyla iletilen tüm verilere request.POST sözlüğü aracılığıyla erişilebilen "yöntem" adlı bir özniteliğe sahiptir.
Myapp / views.py sayfamızda bir giriş görünümü oluşturalım -
#-*- coding: utf-8 -*-
from myapp.forms import LoginForm
def login(request):
username = "not logged in"
if request.method == "POST":
#Get the posted form
MyLoginForm = LoginForm(request.POST)
if MyLoginForm.is_valid():
username = MyLoginForm.cleaned_data['username']
else:
MyLoginForm = Loginform()
return render(request, 'loggedin.html', {"username" : username})
Görünüm, aracılığıyla gönderilen giriş formunun sonucunu gösterecektir. loggedin.html. Test etmek için önce giriş formu şablonuna ihtiyacımız olacak. Buna login.html diyelim.
<html>
<body>
<form name = "form" action = "{% url "myapp.views.login" %}"
method = "POST" >{% csrf_token %}
<div style = "max-width:470px;">
<center>
<input type = "text" style = "margin-left:20%;"
placeholder = "Identifiant" name = "username" />
</center>
</div>
<br>
<div style = "max-width:470px;">
<center>
<input type = "password" style = "margin-left:20%;"
placeholder = "password" name = "password" />
</center>
</div>
<br>
<div style = "max-width:470px;">
<center>
<button style = "border:0px; background-color:#4285F4; margin-top:8%;
height:35px; width:80%;margin-left:19%;" type = "submit"
value = "Login" >
<strong>Login</strong>
</button>
</center>
</div>
</form>
</body>
</html>
Şablon bir giriş formu gösterecek ve sonucu yukarıdaki giriş görünümümüze gönderecektir. Muhtemelen şablondaki etiketi fark etmişsinizdir, bu yalnızca sitenize Siteler Arası İstek Sahteciliği (CSRF) saldırısını önlemek içindir.
{% csrf_token %}
Giriş şablonunu aldıktan sonra, form işleminden sonra oluşturulacak loggedin.html şablonuna ihtiyacımız var.
<html>
<body>
You are : <strong>{{username}}</strong>
</body>
</html>
Şimdi, başlamak için URL çiftimize ihtiyacımız var: myapp / urls.py
from django.conf.urls import patterns, url
from django.views.generic import TemplateView
urlpatterns = patterns('myapp.views',
url(r'^connection/',TemplateView.as_view(template_name = 'login.html')),
url(r'^login/', 'login', name = 'login'))
"/ Uygulamam / bağlantı" ya erişirken, aşağıdaki login.html şablonunun işlenmiş halini alacağız -
Form gönderisinde form geçerlidir. Bizim durumumuzda iki alanı doldurduğunuzdan emin olun ve alacaksınız -
Kullanıcı adınız polo ise ve şifreyi unuttuysanız. Aşağıdaki mesajı alacaksınız -
Kendi Form Doğrulamamızı Kullanmak
Yukarıdaki örnekte, formu doğrularken -
MyLoginForm.is_valid()
Sadece Django kendi kendine form doğrulama motorunu kullandık, bizim durumumuzda sadece alanların gerekli olduğundan emin olduk. Şimdi oturum açmaya çalışan kullanıcının Dreamreal girişi olarak DB'mizde bulunduğundan emin olalım. Bunun için myapp / forms.py'yi - olarak değiştirin
#-*- coding: utf-8 -*-
from django import forms
from myapp.models import Dreamreal
class LoginForm(forms.Form):
user = forms.CharField(max_length = 100)
password = forms.CharField(widget = forms.PasswordInput())
def clean_message(self):
username = self.cleaned_data.get("username")
dbuser = Dreamreal.objects.filter(name = username)
if not dbuser:
raise forms.ValidationError("User does not exist in our db!")
return username
Şimdi, "is_valid" yöntemini çağırdıktan sonra, yalnızca kullanıcı veritabanımızdaysa doğru çıktıyı alacağız. Formunuzun bir alanını kontrol etmek istiyorsanız, "clean_" ile başlayan bir yöntem ve ardından alan adınızı form sınıfınıza eklemeniz yeterlidir. Form oluşturma.ValidationError önemlidir.