bottle vs. wtforms

Django, Flask, Bottle, WSGI, CGI…
Antworten
.robert
User
Beiträge: 274
Registriert: Mittwoch 25. April 2007, 17:59

Hi,

ich habe hier folgenden Beispielcode:

Code: Alles auswählen

#!/usr/bin/env python

from bottle import request, route, run
from wtforms import Form, TextField, SubmitField

class TestForm(Form):
    content = TextField('Name')
    submit = SubmitField('Los')

@route('/')
def index():
    form = TestForm()
    return "<form action='/' method='POST'>"+form.content()+form.submit()+"</form>"

@route('/', method='POST')
def add():
    form = TestForm(request.POST)
    return "Sieg!"

run(reloader=True)
Allerdings bekomme ich immer die Fehlermeldung
Unhandled Exception: TypeError("formdata should be a multidict-type wrapper that supports the 'getlist' method",)
wenn ich das Formular absende.

Python 2.6.4, bottle 0.6.4, wtforms 0.5

Kann mir das jemand erklären? Und vor allem helfen dass zu beheben?

Schon mal grüße,
r.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Also bei mir funzt es!

Versuche doch mal bottle in Version 0.7.

Wobei ich es mit einer rel. aktuellen git Version getestet habe.

Edit: ein debug(True) wäre sinnvoll gewesen... dann hätte man sehen können, wo genau der Fehler geworfen wird.
.robert
User
Beiträge: 274
Registriert: Mittwoch 25. April 2007, 17:59

Jau, mit 0.7 funzt es. Danke!

Aber der Vollständigkeit halber

Code: Alles auswählen

Traceback (most recent call last):
  File "/home/robert/Projects/lab/formtest/lib/python2.6/site-packages/bottle-0.6.4-py2.6.egg/bottle.py", line 309, in __call__
    output = handler(**args)
  File "app.py", line 17, in add
    form = TestForm(request.POST)
  File "build/bdist.linux-x86_64/egg/wtforms/form.py", line 161, in __call__
    return type.__call__(cls, *args, **kwargs)
  File "build/bdist.linux-x86_64/egg/wtforms/form.py", line 214, in __init__
    self.process(formdata, obj, **kwargs)
  File "build/bdist.linux-x86_64/egg/wtforms/form.py", line 85, in process
    raise TypeError("formdata should be a multidict-type wrapper that supports the 'getlist' method")
TypeError: formdata should be a multidict-type wrapper that supports the 'getlist' method
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Na also ;-)

Vermutlich fehlte dem MultiDict Datentypen bei bottle eben eine Funktionalität...

@all: Was genau meint denn diese Meldung? Wo findet man eine Referenz zu dieser "getlist"-Funktionalität?
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

http://bitbucket.org/simplecodes/wtform ... ms/form.py

Code: Alles auswählen

 if formdata is not None and not hasattr(formdata, 'getlist'):
            if hasattr(formdata, 'getall'):
                formdata = WebobInputWrapper(formdata)
            else:
                raise TypeError("formdata should be a multidict-type wrapper that supports the 'getlist' method")
Das sieht nach dem Übeltäter aus. Bottles Mutlidict hat ein getall ;)
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

jbs hat geschrieben: Das sieht nach dem Übeltäter aus. Bottles Mutlidict hat ein getall ;)
Danke Dir für die Mühe. Aber in Version 0.6.4 gab es das noch nicht - also war bottle hier der Übeltäter :-)
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Ich meinte mit Übeltäter eher exception-Werfer :)
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
.robert
User
Beiträge: 274
Registriert: Mittwoch 25. April 2007, 17:59

das "raise ..." hatte ich auch gefunden, aber ich dachte der Fehler liegt bei mir ;)

Dann halt Bottle 0.7...
Antworten