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.

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!