django form validierung

Django, Flask, Bottle, WSGI, CGI…
felix...
User
Beiträge: 3
Registriert: Donnerstag 1. März 2012, 13:06

django form validierung

Beitragvon felix... » Donnerstag 8. März 2012, 00:43

Hallo! Ich sitze gerade an einem kleinen Formular und aus irgendwelchen Gründen funktioniert die Validierung nicht. Vielleicht sieht ja jemand den Fehler und kann mir helfen. Es wäre traumhaft! :)

Hier das Formular:

Code: Alles auswählen

from django import forms

class contact(forms.Form):
   vorname = forms.CharField()
   nachname = forms.CharField()
   email = forms.EmailField()
   nachricht = forms.CharField(widget=forms.Textarea)


Hier die urls:

Code: Alles auswählen

from django.conf.urls.defaults import patterns, include, url
from form.views import form_view, thanks_view

urlpatterns = patterns('',
   url('^form/$', form_view),
   url('^thanks/$', thanks_view),
)


Hier die Viewfunction:

Code: Alles auswählen

from django.shortcuts import render_to_response
from django.http import HttpResponseRedirect
from django.core.mail import send_mail
from form.forms import contact

def form_view(request):
   if request.method == 'POST':
      a = contact(request.POST)
      if a.is_valid():
         b = a.cleaned_data
         send_mail(
            b['vorname'],
            b['nachname'],
            b['email'],
            b['nachricht'],
            b.get('email', 'xyz@abc.de'),
            ['xyz@abc.de'],
         )
      return HttpResponseRedirect('/thanks/')
   else:
      a = contact()
      return render_to_response('contact.html', {'a': a})

def thanks_view(request):
   return render_to_response('thanks.html')


Hier die contact.html:

Code: Alles auswählen

<html>
    <head>
        <title>Contact us</title>
    </head>
    <body>
        <h1>Contact us</h1>
            {% if a.errors %}
                <p style="color: red;">
                    Please correct the error{{ a.errors|pluralize }} below.
                </p>
            {% endif %}
        <form action="." method="post">
            <table>
                {{ a.as_table }}
            </table>
            <input type="submit" value="Submit">
        </form>
    </body>
</html>


Und hier die /thanks/:

Code: Alles auswählen

<html>
    <head>
        <title>Thank You!</title>
    </head>
    <body>
        <h1>Thank You!</h1>
    </body>
</html>



Ich verstehe nicht warum es nicht funktioniert! Man wird onsubmit immer direkt zur url /thanks/ weitergeleitet, ohne dass die Eingaben geprüft werden. Ich hab die Validierung in der shell probiert.. die funktioniert auf jeden fall. Was mache ich falsch ?! :|

Edit: Arbeite grad die dokumentation durch (http://www.djangobook.com/en/2.0/chapter07/)
Benutzeravatar
/me
User
Beiträge: 3085
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Re: django form validierung

Beitragvon /me » Donnerstag 8. März 2012, 08:33

felix... hat geschrieben:

Code: Alles auswählen

                [...]
      if a.is_valid():
         b = a.cleaned_data
         send_mail(
            b['vorname'],
            b['nachname'],
            b['email'],
            b['nachricht'],
            b.get('email', 'xyz@abc.de'),
            ['xyz@abc.de'],
         )
      return HttpResponseRedirect('/thanks/')

Ich verstehe nicht warum es nicht funktioniert! Man wird onsubmit immer direkt zur url /thanks/ weitergeleitet, ohne dass die Eingaben geprüft werden.

Du rufst if a.is_valid() auf und machst den Redirect dann unabhängig davon was das Ergebnis ist.
felix...
User
Beiträge: 3
Registriert: Donnerstag 1. März 2012, 13:06

Re: django form validierung

Beitragvon felix... » Donnerstag 8. März 2012, 13:46

ok.. aber warum?

Code: Alles auswählen

if a.is_valid()
...
return HttpResponseRedirect('/thanks/')


Das bezieht sich doch aufeinander oder nicht ?!

Was muss ich tun damit der redirect nicht mehr unabhängig vom Ergebnis ist?
deets

Re: django form validierung

Beitragvon deets » Donnerstag 8. März 2012, 13:51

Es richtig einruecken?

Code: Alles auswählen

if False:
    pass
print "redirect"


gibt doch auch redirect aus, egal, ob die Bedingung True oder False ist...
felix...
User
Beiträge: 3
Registriert: Donnerstag 1. März 2012, 13:06

Re: django form validierung

Beitragvon felix... » Donnerstag 8. März 2012, 14:08

oh man. Ja es war nicht richtig eingerückt. Ich sitz hier stundenlang.. verrückt. :)

So funktioniert es auf jeden fall:

Code: Alles auswählen

from django.shortcuts import render_to_response
from django.http import HttpResponseRedirect
from django.core.mail import send_mail
from form.forms import contact

def form_view(request):
   if request.method == 'POST':
      a = contact(request.POST)
      if a.is_valid():
         b = a.cleaned_data
         send_mail(
            b['vorname'],
            b['nachname'],
            b['email'],
            b['nachricht'],
            b.get('email', 'xyz@abc.de'),
            ['xyz@abc.de'],
         )
         return HttpResponseRedirect('/thanks/')
   else:
      a = contact()
   return render_to_response('contact.html', {'a': a})

def thanks_view(request):
   return render_to_response('thanks.html')

Zurück zu „Webframeworks“

Wer ist online?

Mitglieder in diesem Forum: Yahoo [Bot]