18.10.2013 Aufrufe

PDF-Version - freiesMagazin

PDF-Version - freiesMagazin

PDF-Version - freiesMagazin

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

# -*- coding: utf -8 -*-<br />

from fungiform.forms import FormBase , TextField , DateField , \<br />

ChoiceField , PasswordField , ValidationError<br />

class UserData(FormBase):<br />

def is_valid_name(self ,value):<br />

if value in ['admin','superuser']:<br />

message = u'unerlaubter Benutzername'<br />

raise ValidationError(message)<br />

name = TextField(label=u'Name', required=True ,<br />

validators=[is_valid_name])<br />

birthday = DateField(label=u'Geburtsdatum')<br />

gender = ChoiceField(label=u'Geschlecht',<br />

choices=[u'männlich',u'weiblich'])<br />

class LoginForm(FormBase):<br />

def is_valid_email(self ,value):<br />

if '@' not in value:<br />

message = u'ungültige E-Mail Adresse'<br />

raise ValidationError()<br />

email = TextField(label=u'Email', required=True ,<br />

min_length=6, max_length =120)<br />

pass1 = PasswordField(label='Passwort', required=True)<br />

pass2 = PasswordField(label='Wiederholung', required=True)<br />

def context_validate(self , data):<br />

if data['pass1'] != data['pass2']:<br />

message = u'Passwörter stimmen nicht überein'<br />

raise ValidationError(message)<br />

Listing 4: fungiform_form.py<br />

PROGRAMMIERUNG<br />

Wie man sieht, kommen alle Importe aus<br />

fungiform.forms. Importiert wird die Basisklasse<br />

für alle Formulare FormBase sowie die<br />

benötigten Klassen für Formularfelder und der<br />

ValidationError, welcher für die selbstgeschriebenen<br />

Validatoren benötigt wird.<br />

Die beiden Klassen UserData und LoginForm<br />

besitzen jeweils einen selbstdefinierten Validator.<br />

Diesem muss immer value übergeben werden,<br />

was der zu prüfende Wert ist. Der anschließende<br />

Code kann beliebiger Python-Code sein. Wenn<br />

die Validierung nicht erfolgreich war, wird der<br />

ValidationError geworfen, wobei diesem eine<br />

benutzdefinierte Fehlermeldung mitgegeben werden<br />

kann.<br />

Der sonstige Code der Klassen sollte weitestgehend<br />

selbsterklärend sein. Ist ein Feld ein Pflichfeld<br />

(wie z. B. name), so setzt man das Attribute<br />

required=True. Übergibt man später Fungiform<br />

für die Validierung des gesamten Formulars<br />

keinen Wert für dieses Feld, so wird ein entsprechender<br />

Fehler geworfen.<br />

In der Klasse LoginForm wird ein zusätzlicher<br />

Validator namens context_validate benutzt,<br />

welcher die beiden Passworteingaben vergleicht.<br />

Besitzt eine Klasse diesen, so wird er auf die<br />

gesamte Klasse (das gesamte Formular) angewendet<br />

und nicht, wie die anderen Validatoren,<br />

nur auf einzelne Instanzen einer Klasse. Im Gegensatz<br />

zu einem „Einzelvalidator“ muss man<br />

context_validate immmer data übergeben,<br />

welches alle Formulardaten enthält.<br />

© <strong>freiesMagazin</strong> CC-BY-SA 3.0 Ausgabe 12/2011 20

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!