18.10.2013 Aufrufe

PDF-Version - freiesMagazin

PDF-Version - freiesMagazin

PDF-Version - freiesMagazin

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!