PDF-Version - freiesMagazin
PDF-Version - freiesMagazin
PDF-Version - freiesMagazin
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