Baňka-WTF nezpracovává mou odpověď formulář

hlasů
0

Jsem pomocí baňky (VSN 0,8) a banku-WTF (VSN 0.5.2) (např analyzovat formy), aby se docela jednoduché webové stránky. Nicméně, já jsem schopen se dostat Baňka-WTF správně analyzovat své výsledky GET.

Můj příslušný kód vypadá takto:

@app.route(/result, methods=(GET, POST))
def submit():
    form = MyForm()
    print request.args
    print request.args.get('aws_id', None, type=str)
    print form.is_submitted()
    if form.validate_on_submit():
        flash('Success')
        aws_id = form.aws_id.data
    return render_template(index.html, form=form)

Pokud odešlu formulář s jedinou pole s názvem ‚aws_id‘ s GET se mi zobrazí následující výstup na konzoli.

127.0.0.1 - - [19/Oct/2011 22:28:59] GET /result?aws_id=test_string HTTP/1.1 200 -
ImmutableMultiDict([('aws_id', u'test_string')])
test_string
False

Zdá se mi líbí předložit pracuje správně, ale baňky-WTF není dělá svou věc. V podstatě starý způsob řešení formou výstupních prací, způsobu request.args.get, ale nový form.is_submitted a form.validate_on_submit nejsou dělají svou kouzelnou dobrotu.

Nějaké nápady? (WTF!)

Položena 20/10/2011 v 03:45
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
2

Přesunul jsem aplikaci do kořenového mých stránek, vypouští se ten, který tam byl (= redundantní), a přidá se request.formdo třídy MyForm. Zdá se, že to opravit. Bylo také nutné nastavit csrf_enabledna hodnotu false.

@app.route("/", methods=("GET", "POST"))
def submit():
    form = MyForm(request.form, csrf_enabled=False)
    if form.validate_on_submit():
        print form.data

    return render_template("index.html", form=form)
Odpovězeno 20/10/2011 v 16:24
zdroj uživatelem

hlasů
2

Baňka-WTF je Formtřída is_submittedmetoda vypadá takto:

def is_submitted(self):
    """
    Checks if form has been submitted. The default case is if the HTTP
    method is **PUT** or **POST**.
    """

    return request and request.method in ("PUT", "POST")

A ve svém __init__má tento kód, který normálně zajišťuje formdata je načten automaticky z požadavku Flask:

    if formdata is _Auto:
        if self.is_submitted():
            formdata = request.form

Takže je to jasné ... když odeslat formulář přes GET nechcete dostat některý z pěkné auto chování. Je to pochopitelné, protože v případě, že je požadavek GET, že to není jasné, zda forma byla předložena, nebo jste právě načítání stránky. To je kromě případné problémy CSRF.

validate_on_submit nefunguje ani, jak se také opírá is_submitted

Baňky sám také není analyzovat Získat pole do request.formpro vás.

Skončíte museli udělat něco jako:

form = MyForm(request.args, csrf_enabled=False)
if 'aws_id' in request.args and form.validate():
    flash('Success')
    aws_id = form.aws_id.data

(všechny předpokládat MyFormtřída dědí z from flask.ext.wtf import Form)

Odpovězeno 11/06/2013 v 18:00
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more