PDF-Version - freiesMagazin
PDF-Version - freiesMagazin
PDF-Version - freiesMagazin
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Interessent ist bei gender, dass Auswahlmenüs<br />
erst als normales Feld, hier vom Typ String,<br />
definiert werden und erst dann festgelegt wird,<br />
dass es eine Dropdown-Liste sein soll. Bei<br />
Checkboxen und Radiobuttons geschieht dies<br />
auf gleiche Art und Weise. Im zweiten Formular<br />
LoginForm wird über password() bestimmt,<br />
dass dieses Feld ein Passwortfeld ist. Weiterhin<br />
wird in dieser Klasse zuerst eine eigene Funktion<br />
pass2_validator definiert, welche später<br />
bei pass2 als eigener Validator dient.<br />
Tests in der Python-Konsole<br />
Um FormAlchemy noch näher kennenzulernen<br />
wird eine Python-Konsole aufgerufen, um ein<br />
bisschen mit den Formularen zu experimentieren.<br />
Dazu werden aus FormAlchemy_forms.py<br />
beide Klassen importiert. Außerdem wird noch<br />
FieldSet aus FormAlchemy benötigt.<br />
>>> from formalchemy_forms import UserData , LoginForm<br />
>>> from formalchemy import FieldSet<br />
Mit Hilfe des FieldSet wird nun die eigentliche<br />
Klasse erzeugt, mit der das HTML-Formular später<br />
generiert wird und mit deren Hilfe auch Formulardaten<br />
validiert werden können.<br />
>>> ud = FieldSet(UserData)<br />
Der einfache Aufruf von userdata zeigt die enthaltenen<br />
Felder:<br />
>>> ud<br />
<br />
Das Generieren des HTML-Formulars geschieht<br />
über den Aufruf von render():<br />
>>> ud.render()<br />
u'Name <<br />
input id="UserData --name" name="<br />
UserData --name" type="text" /> [...]'<br />
Die Länge der Ausgabe ist dadurch bedingt, dass<br />
FormAlchemy Datumsfelder per Voreinstellung<br />
als Auswahlmenüs darstellt, zumindest für Monat<br />
und Tag. Das Jahr ist ein Textfeld mit einer Länge<br />
von vier. Das Feld ist aber trotzdem optional,<br />
sofern es nicht in der Klasse als required() gekennzeichnet<br />
wird.<br />
Außerdem ist ein kurzer Schnipsel Javascript enthalten,<br />
welcher den Fokus direkt auf das erste<br />
Eingabefeld setzt. Form-<br />
Alchemy verwendet vergleichsweise<br />
lange Namen<br />
für die einzelnen Felder, welche sich aus<br />
dem Formularnamen, zwei Minuszeichen und<br />
dem Feldnamen zusammensetzen, also z. B.<br />
UserData--name.<br />
Die öffnenden und schließenden -Tags<br />
werden nicht automatisch generiert, ebenso<br />
erzeugt FormAlchemy nicht die „Senden“-<br />
Schaltflächen. Dies muss also später in der Applikation<br />
händisch erfolgen.<br />
Es ist auch möglich, nur einzelne Felder aus dem<br />
Formular rendern zu lassen:<br />
PROGRAMMIERUNG<br />
>>> ud = FieldSet(UserData)<br />
>>> ud.configure(include=[ud.name])<br />
>>> ud<br />
<br />
>>> ud.render()<br />
u'Name [...]<br />
Die Liste hinter include enthält die Feldnamen,<br />
die dargestellt werden sollen. Es ist auch möglich,<br />
ein Liste von Feldnamen auszuschließen.<br />
Dafür wird include einfach durch exclude ersetzt.<br />
Um ein Formular zu validieren, müssen zuerst<br />
Daten an das Formular übergeben werden. Dies<br />
geschieht direkt beim Anlegen des FieldSet:<br />
>>> logindata = {'LoginForm --<br />
myemail': 'foo@bar.de',<br />
'LoginForm --pass2'<br />
: 'spamegg',<br />
'LoginForm --pass1'<br />
: 'spamegg'}<br />
>>> lf = FieldSet(LoginForm , data=<br />
logindata)<br />
>>> lf.data<br />
SimpleMultiDict ([('LoginForm --<br />
myemail', u'foo@bar.de'), ('<br />
LoginForm --pass2', u'spamegg'), ('<br />
LoginForm --pass1', u'spamegg')])<br />
>>> lf.data['LoginForm --pass1']<br />
u'spamegg'<br />
>>> lf.validate()<br />
True<br />
© <strong>freiesMagazin</strong> CC-BY-SA 3.0 Ausgabe 12/2011 18