使用GET而非POST提交Wtform
我正在尝试使用wtforms、flask和bootstrap来制作一个简单的表单,但我提交表单时却出现了GET请求,而不是我想要的POST请求。
我之前只用flask的时候是可以正常工作的,但当我开始从flask.ext.wtf导入Form,使用form.validate_on_submit而不是简单的validate,并且使用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 %}
1 个回答
5
如果你不指定一个 method
属性,表单默认会使用 GET
方法。要使用 POST
方法,只需要在你的表单标签中添加这个属性,像这样:
<form class="form form-horizontal" role="form" method="POST">