首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Flask应用程序中提交表单时出现错误请求错误的原因是什么?

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

Stack Overflow用户
提问于 2013-01-01 03:36:26
回答 1查看 97.3K关注 0票数 83

在阅读了许多类似的发音问题和相关的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的相关部分是

<html>
<head>
    <title>apply</title>
</head>
<body>
    {% if accounttype=="business" %}
    <form action="{{ url_for('apply_business') }}" method=post class="application_form">
    {% elif accounttype=="student" %}
    <form action="{{ url_for('apply_student') }}" method=post class="application_form">     
    {% endif %} 
    <p>Full Name:</p>
    <input name="name_field" placeholder="First and Last">
    <p>Email Address:</p>
    <input name="email_field" placeholder="your@email.com">
    ...

对于大多数人来说,问题不是调用GETPOST,但我在这两个函数中都是这样做的,并且我仔细检查以确保导入了所有必要的东西,比如from flask import request。我还查询了数据库,并确认表单中添加的内容并未添加。

在Flask应用程序中,我请求的表单字段在HTML表单中的标签略有不同。保持名称的一致性是必须的。有关更多信息,请访问此问题Form sending error, Flask

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-02 04:28:22

解决方案很简单,在评论中没有涉及到。正如这个问题所述,以及Sean Vieira所指出的,Form sending error, Flask

Flask的问题是,当它在args和表单字典中找不到关键字时,

会引发...the错误。Flask默认假设的是,如果你请求一个特定的键,但它不在那里,那么请求中就会遗漏一些东西,整个请求就是无效的。

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

<input name="question1_field" placeholder="question one">

在Python中,当有一个名为的帖子时,我使用

request.form['question1']

然而,为了与我的HTML表单名称一致,它需要

request.form['question1_field']

我希望这能帮到你。

票数 139
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14105452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档