Python 在Flask应用程序中提交表单时出现错误请求的原因是什么?

Python 在Flask应用程序中提交表单时出现错误请求的原因是什么?,python,forms,post,flask,bad-request,Python,Forms,Post,Flask,Bad Request,在阅读了许多类似的问题和相关的Flask文档后,我似乎无法找出在提交表单时产生以下错误的原因: 400错误请求 浏览器(或代理)发送了此服务器无法理解的请求 虽然表单始终正确显示,但当我提交与以下任一函数关联的HTML表单时,会发生错误请求: @app.route('/app/business', methods=['GET', 'POST']) def apply_business(): if request.method == 'POST': new_acco

在阅读了许多类似的问题和相关的Flask文档后,我似乎无法找出在提交表单时产生以下错误的原因:

400错误请求

浏览器(或代理)发送了此服务器无法理解的请求

虽然表单始终正确显示,但当我提交与以下任一函数关联的HTML表单时,会发生错误请求:

@app.route('/app/business', methods=['GET', 'POST'])
def apply_business():
    if request.method == 'POST':    
        new_account = Business(name=request.form['name_field'], email=request.form['email_field'], account_type="business", 
            q1=request.form['q1_field'], q2=request.form['q2_field'], q3=request.form['q3_field'], q4=request.form['q4_field'], 
            q5=request.form['q5_field'], q6=request.form['q6_field'], q7=request.form['q7_field'],
            account_status="pending", time=datetime.datetime.utcnow())
        db.session.add(new_account)
        db.session.commit()
        session['name'] = request.form['name_field']    
        return redirect(url_for('success'))
    return render_template('application.html', accounttype="business")          

@app.route('/app/student', methods=['GET', 'POST'])
def apply_student():    
    if request.method == 'POST':    
        new_account = Student(name=request.form['name_field'], email=request.form['email_field'], account_type="student", 
            q1=request.form['q1_field'], q2=request.form['q2_field'], q3=request.form['q3_field'], q4=request.form['q4_field'], 
            q5=request.form['q5_field'], q6=request.form['q6_field'], q7=request.form['q7_field'], q8=request.form['q8_field'], 
            q9=request.form['q9_field'], q10=request.form['q10_field'],
            account_status="pending", time=datetime.datetime.utcnow())
        db.session.add(new_account)
        db.session.commit()
        session['name'] = request.form['name_field']    
        return redirect(url_for('success')) 
    return render_template('application.html', accounttype="student")
HTML的相关部分是


应用
{%if accounttype==“business”%}
{%elif accounttype==“学生”%}
{%endif%}
全名:

电邮地址:

...
大多数人的问题不是调用
GET
POST
,但我在这两个函数中都是这样做的,我反复检查以确保导入了所有必要的内容,例如从flask导入请求导入的
。我还查询了数据库,确认没有添加表单中的添加内容


在Flask应用程序中,我请求的表单字段与HTML表单中的标签略有不同。保持名称一致是必须的。关于这个问题,可以阅读更多的内容。

答案很简单,在评论中没有提及。正如本问题所述,并由

…问题是Flask在找不到 输入参数和表单字典。默认情况下,Flask假设什么 如果你要的是一把钥匙,但它不在那里 请求中遗漏了一些内容,整个请求都被删除了 无效

换句话说,如果在HTML中只能找到Python中请求的一个表单元素,那么POST请求无效,并且出现错误,在我的例子中,回溯中没有任何异常。对我来说,这与拼写缺乏一致性:在HTML中,我标记了各种表单输入

<input name="question1_field" placeholder="question one">
然而,为了与我的HTML表单名称保持一致,它需要

request.form['question1_field']

我希望这能有所帮助。

你看过@SeanVieira I Have;虽然导致了同样的错误,但问题似乎是他试图从同一页面上的两个不同按钮提交表单——问题在于区分这两个按钮——而我只有一个按钮来调用帖子。笑对不起,应该更清楚一些-“Flask在args和表单字典中找不到键时会引发HTTP错误”-您试图在
请求中访问的字段之一。表单
不存在(例如,您正在发送
name\u feild
并查找
name\u字段
-注意拼写错误),因此出现错误。(设置
app.debug=True
将帮助您找到错误)。您还可以
request.form.get('key',默认值)
@OdraEncoded您的解决方案修复了问题。我没有想到,但是
dict.get()
返回
None
,这比直接使用钥匙访问更安全,因为钥匙会导致
keyrerror
,从而导致应用程序崩溃。
request.form['question1_field']