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.
from wtforms_forms import <br />
UserData , LoginForm<br />
wird eine eigene Klasse ud von UserData abgeleitet:<br />
>>> ud = UserData()<br />
Das Rendern der Formularfelder ist dabei denkbar<br />
einfach. Dazu wird einfach das darzustellende<br />
Feld der Klasse aufgerufen:<br />
>>> ud.name()<br />
u''<br />
>>> ud.send()<br />
u''<br />
Im Gegensatz zum weiter oben gezeigten Deform<br />
– und auch im Gegensatz zu den noch folgenden<br />
FormAlchemy und Fungiform – rendert<br />
WTForms nicht das ganze Formular, sondern nur<br />
die jeweiligen Felder. Die -Tags inklusive<br />
action=... müssen also manuell gesetzt werden.<br />
Wie bei der Klassendefinition der Formulare bereits<br />
erwähnt, können die Label separat gerendert<br />
werden:<br />
>>> ud.name.label()<br />
u'Name '<br />
Der Vorteil ist, dass später so mehr Flexibilität bei<br />
der Darstellung in der Webapplikation besteht,<br />
dafür aber auch mehr Code-Zeilen nötig sind.<br />
Als Nächstes werden direkt Daten an das Formular<br />
übergeben und die Validierung aufgerufen:<br />
PROGRAMMIERUNG<br />
>>> ud = UserData(name='Otto',birthday='1977-1-1',gender=u'männlich')<br />
>>> ud.validate()<br />
True<br />
Da alle Daten im Gültigkeitsbereich liegen, validiert<br />
das Formular natürlich. Im folgenden Beispiel<br />
wird für name ein nicht gültiger Wert übergeben,<br />
sodass das Formular nicht validiert:<br />
>>> ud = UserData(name='admin',<br />
birthday='1977-1-1',gender=u'mä<br />
nnlich')<br />
>>> ud.validate()<br />
False<br />
Die Fehler können wie folgt aufgerufen werden:<br />
>>> ud.errors<br />
{'name': [u"Invalid value , can't be any of: admin , superuser ."]}<br />
Da keine eigene Fehlermeldung für diese Validierung<br />
in der Klasse hinterlegt wurde, gibt WT-<br />
Forms die Standardfehlermeldung aus. Die Fehler<br />
stehen übrigens in einer Liste, weil ein Feld<br />
durchaus auch mehrere Fehler enthalten kann, je<br />
nachdem, wieviele und welche Validatoren hinterlegt<br />
sind.<br />
Weiteres zu WTForms<br />
WTForms bietet neben den hier gezeigten Feldern<br />
auch alle anderen gängigen Feldtypen. Das<br />
Anlegen eigener, neuer Feldtypen ist ebenfalls<br />
möglich. Hinweise dazu findet man in der offiziellen<br />
Dokumentation.<br />
Des Weiteren gibt es einige offizielle Erweiterungen<br />
zu WTForms [9]. Diese erlauben unter<br />
anderem die vereinfachte Nutzung von WTForms<br />
in Kombination mit Django, SQLAlchemy und der<br />
Google-App-Engine.<br />
FormAlchemy<br />
FormAlchemy [10] trägt von allen hier vorgestellten<br />
Programmen die höchste <strong>Version</strong>snummer,<br />
nämlich 1.4.1 und ist natürlich entsprechend<br />
als „stable“ gekennzeichnet. Wie der Name<br />
vermuten lässt, gibt es eine Verbindung<br />
zu SQLAlchemy [11], einem der populärsten<br />
Object-Relational-Mapper für SQL-Datenbanken<br />
unter Python. FormAlchemy kann nämlich für<br />
SQLAlchemy-Modelle bzw. gemappte Klassen<br />
direkt HTML-Formulare erstellen. Dies ist sehr<br />
praktisch, wenn man seine Daten ohnehin über<br />
diesen ORM abruft und speichert, zumal FormAlchemy<br />
Formulareingaben auch direkt wieder in<br />
der Datenbank speichern kann.<br />
Aber das Framework kann auch Formulare „konventionell“<br />
erstellen, so wie die anderen hier<br />
vorgestellten Programme auch. Dies wird im<br />
Rahmen dieses Artikels behandelt. Der einzige<br />
Unterschied zur direkten Anbindung an SQLAlchemy<br />
ist übrigens, dass man bei „manuellen“<br />
© <strong>freiesMagazin</strong> CC-BY-SA 3.0 Ausgabe 12/2011 16