Отправка Wtform с использованием GET, а не POST

Я пытаюсь заставить простую форму работать с помощью wtforms, flask и bootstrap, но моя отправка формы приводит к GET с параметрами формы вместо POST.

У меня это работает только с flask, но когда я переключился на импорт формы из flask.ext.wtf, используя form.validate_on_submit вместо простой проверки и используя flask_bootstrap, но теперь отправка формы приводит к действию GET вместо действия POST . Что мне не хватает?

Вот что я вижу в своей консоли:

GET
127.0.0.1 - - [14/Apr/2014 21:04:10] "GET / HTTP/1.1" 200 -
GET
127.0.0.1 - - [14/Apr/2014 21:04:13] "GET /?csrf_token=None&recipe1=dfsaasdf&recipe2=adfsadfs&submit_button=Submit+Form HTTP/1.1" 200

Вот мое приложение полностью:

from flask import render_template, request, redirect, url_for
from flask.ext.wtf import Form
from wtforms.ext.csrf import SecureForm
from wtforms import TextField, HiddenField, ValidationError, RadioField,\
    BooleanField, SubmitField, IntegerField, FormField, validators
from concat.recipe_concatenator import RecipeConcatenator

from flask_bootstrap import Bootstrap
from flask import Flask
from hashlib import md5

app = Flask(__name__)
Bootstrap(app)
app.config['DEBUG'] = True
SECRET_KEY = '1234567890'

class RecipeCompareForm (Form):
    recipe1 = TextField('Recipe 1', [])
    recipe2 = TextField('Recipe 2')
    submit_button = SubmitField('Submit Form')

@app.route('/', methods=['GET', 'POST'])
def compare():
    print request.method
    form = RecipeCompareForm(csrf_enabled=False)
    if form.validate_on_submit():
        print "validated"
        print form.recipe1.data
    message = "blah"
        return redirect(url_for('results', message=message))
    return render_template('form.html', form=form)

@app.route('/results')
def results():
    message = request.args['message']
    return render_template('results.html', message=message)

if __name__ == '__main__':
    app.run()

Шаблон:

{% extends "bootstrap/base.html" %}

{% import "bootstrap/wtf.html" as wtf %}
{% import "bootstrap/fixes.html" as fixes %}
{% block content %}
<form class="form form-horizontal" role ="form">

  {{ form.hidden_tag() }}
  {{ wtf.form_errors(form, hiddens="only") }}
  {{ wtf.form_field(form.recipe1) }}
  {{ wtf.form_field(form.recipe2) }}
  {{ wtf.form_field(form.submit_button) }}
</form>
{% endblock %}

person sutee    schedule 15.04.2014    source источник


Ответы (1)


Если вы не укажете атрибут method, формы по умолчанию будут иметь значение GET. Чтобы использовать POST, добавьте атрибут метода в тег формы, например:

<form class="form form-horizontal" role="form" method="POST">
person Burhan Khalid    schedule 15.04.2014