我有一个表单(在index.html中创建)。 但是,当我点击提交时,我收到400错误请求错误。我认为它与Flask中的应用程序路由有关,但我找不到解决方案......
在Index.html(摘录)中:
<form class="demographic-form" action="/getsurveyresult" method="post"> Question: <br> <input type="checkbox" name="question" value="yes">Check this box! <br> <input type="submit" id="submitButton" value="Submit"> </form>
在app.py中:
from flask import *
import json
app = Flask(__name__)
app.debug = True
app.vars = {}
@app.route("/")
def index():
return render_template("index.html")
@app.route('/getsurveyresults', methods=['POST'])
def processData():
app.vars['question'] = request.form['question']
f = open('data.txt' ,'w')
f.write('question: %s\n' %(app.vars['question']))
f.close()
return render_template("getsurveyresults.html")
if __name__ == "__main__":
app.run()
我在index.html所在的文件夹中有一个getsurveyresults.html脚本。 Index.html没有问题呈现。
P.S。我尝试用action =“{{url_for('getsurveyres')}}替换action =”/ getsurveyresult“但是我得到了一个werkzeug.routing.BuildError - 如下所示
答案 0 :(得分:3)
你有两个问题:
如果未选中question
复选框,则POST数据中将没有question
字段。 Flask在KeyError
和args
上的无效键查找上引发了form
的子类(就像普通的Python字典一样)。这显示为400错误。如果该字段是可选字段,请使用request.form.get('question')
url_for
的参数应该是控制器的名称(在本例中为processData
),而不是URL。
答案 1 :(得分:0)
你有一个小错字:
@app.route('/getsurveyresults')
<form class="demographic-form" action="/getsurveyresult"
您需要将@ app.route更改为/ getsurveyresult(没有最终的s),或将表单操作更改为/ getsurveyresultS(带有最终的s)。您还可以使用flask的url_for函数:
<form class="demographic-form" action="{{ url_for('processData') }}"