HTML Formular mit Flatland erstellen

Django, Flask, Bottle, WSGI, CGI…
Antworten
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

weiß jemand, wie man mit Flatland eine vernünftiges HTML Formular erstellt? Also z.B. ein, was mit WTForm so aussieht:

Code: Alles auswählen

from wtforms import Form, TextField, SelectField, DateField, \
PasswordField, validators

class UserData(Form):
    name = TextField(u'Name',
        [validators.Required(),validators.NoneOf('admin','superuser')])
    birthday = DateField(u'Geburtsdatum',[validators.Optional()])
    sex = SelectField(u'Geschlecht',
        choices=[(u'männlich',u'männlich'),(u'weiblich',u'weiblich')])
Mit Deform und Fungiform bekomme ich das auch ohne Probleme hin, bei Flatland habe ich eine mittelschwere Krise. Ich weiß noch nicht mal im Ansatz, wie man vernünftig und automatisch ein select-Feld bekommt. Außerdem checke ich nicht, wie man die Daten des übermittelten, ausgefüllten Formulars zwecks Validierung an die Flatland-Form über gibt. Wenn jemand einen (schlechten?) Startpunkt braucht:

Code: Alles auswählen

from flatland import Form, String, Date
from flatland.validation import Present, ValueIn
from flatland.out.markup import Generator

gen = Generator()
sex_data = [u'männlich',u'weiblich']

def not_allowed_name(element, state):
    if element.value in ['admin','superuser']:
        return False
    else:
        return True

class UserData(Form):
    name = String.using(
        label = u'Name',
        validators = [
            Present(),
            not_allowed_name])
    birthday = Date.using(
        label = u'Geburtsdatum',
        optional = True)
    sex = String.using(
        label = u'Geschlecht',
        validators = [
            Present(),
            ValueIn(sex_data)
        ])
Da "sex" ein String ist kann man für das Feld schon mal keine "<option>"-Liste für das select-Feld bauen... Aber alle meine Versuche mit "sex=List..." oder "sex=Dict..." sind kläglich gescheitert.

Gruß, noisefloor
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

noisefloor hat geschrieben: Da "sex" ein String ist ...
Sagt man dazu nicht eher `gender`?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

geht beides. Wobei "sex" ja auch englisch ist, also konform mit der PEP8 :D

DAS ist aber das kleinere Problem. ;-)

Gruß, noisefloor
Antworten