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.
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