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.

Flatland erwartet, wie zu sehen ist, für das Geburtsdatum<br />

explizit ein Python-Date-Objekt. Ein<br />

String in der Form 1977-1-1, wie ihn die anderen<br />

Frameworks als gültiges Datum akzeptieren,<br />

führt in Flatland zu einem Fehler.<br />

Als Nächstes wird das Formular gegen einen ungültigen<br />

Datensatz validiert:<br />

>>> mydata = {'name':'admin',<br />

'gender':u'männlich',<br />

'birthday':date(1977,1,1)}<br />

>>> ud.set(mydata)<br />

True<br />

>>> ud.validate()<br />

False<br />

Wie nicht anders zu erwarten, schlägt die Validierung<br />

fehl. Leider speichert Flatland keine Fehlerliste,<br />

welche für das ganze Formular gilt. Vielmehr<br />

werden die Fehler in den jeweiligen zugehörigen<br />

Feldern hinterlegt. Von daher muss man<br />

über diese iterieren, um die Fehler zu sehen:<br />

>>> for k in ud.iterkeys():<br />

... print k, ud[k].valid<br />

... print k, ud[k].errors<br />

...<br />

gender True<br />

gender []<br />

birthday True<br />

birthday []<br />

name False<br />

name [u'Verbotener Name']<br />

Flatland ist das einzige der hier vorgestellten Frameworks,<br />

das für das Rendern der Formulare<br />

nach HTML einen eigenen Import benötigt, nämlich<br />

den Generator:<br />

>>> from flatland.out.markup import<br />

Generator<br />

Dies ist übrigens zum Zeitpunkt des Schreibens<br />

dieses Artikels vollständig undokumentiert, d. h.<br />

in der offiziellen Dokumentation an keiner Stelle<br />

erwähnt.<br />

Danach können die Formularfelder generiert werden:<br />

>>> gen = Generator()<br />

>>> gen.input(ud['name'], type='<br />

text')<br />

<br />

Ähnlich wie WTForms rendert Flatland die Felder<br />

einzeln. Das komplette Rendern eines ganzen<br />

Formulars wird nicht unterstützt. Wie zu sehen<br />

ist, wird über gen.input() ein -Feld<br />

generiert, type=’text’ legt den Typ als Textfeld<br />

fest.<br />

Da Flatland scheinbar keine Auswahlfelder unterstützt,<br />

müssen diese von Hand „gebaut“ werden:<br />

>>> from flatland_forms import <br />

GENDER_DATA<br />

>>> gen.select.open()<br />

u''<br />

>>> for i in GENDER_DATA:<br />

... gen.option.open(),\<br />

... i,gen.option.close()<br />

PROGRAMMIERUNG<br />

...<br />

u' männlich '<br />

u' weiblich '<br />

>>> gen.select.close()<br />

u''<br />

Der Generator aus Flatland ist also recht flexibel<br />

und kann alle für Formulare benötigten HTML-<br />

Tags generieren. Nichtsdestotrotz ist diese Vorgehensweise<br />

vergleichsweise aufwändig.<br />

Sonstiges<br />

Neben diversen weiteren Feldtypen sowie der<br />

Möglichkeit der Verschachtelung von Feldern<br />

kennt Flatland auch noch „Signals“ [29]. Diese<br />

können in den Programmcode eingebaut werden<br />

und senden während der Verarbeitung von Formularen<br />

zu oder nach einem bestimmten Ergebnis,<br />

wie einer erfolgreichen Validierung, ein Signal<br />

an eine Liste vordefinierter Empfänger. Des<br />

Weiteren gibt es eine Anbindung an die beiden<br />

Template-Engines „Genshi“ und „Jinja2“ [30].<br />

Weitere Alternativen<br />

Die hier vorgestellten Programme stellen natürlich<br />

nur einen Ausschnitt der existierenden Frameworks<br />

dar. Ein weiteres ist z. B. FormEncode<br />

[31]. Noch mehr Alternativen sind auf PyPi zu<br />

finden, wenn z. B. als Suchbegriff „html form“ eingegeben<br />

wird.<br />

Wird das für Webapplikationen auch sehr populäre<br />

Django [32] genutzt, so steht hier ein eigenes<br />

Modul für HTML-Formulare bereit [33], welches<br />

natürlich komplett in Django integriert ist.<br />

© <strong>freiesMagazin</strong> CC-BY-SA 3.0 Ausgabe 12/2011 24

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!