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

2025-02-27 09:05:00
admin
原创
79
摘要:问题描述:在阅读了许多类似的问题和相关的 Flask 文档之后,我似乎无法弄清楚在提交表单时是什么产生了以下错误:400 错误请求浏览器(或代理)发送了该服务器无法理解的请求。尽管表单始终可以正确显示,但是当我提交与以下任一功能相关的 HTML 表单时,就会发生错误请求:@app.route('/app/bu...

问题描述:

在阅读了许多类似的问题和相关的 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 表单中的标签略有不同。必须保持名称一致。更多信息可在此问题中阅读:表单发送错误,Flask


解决方案 1:

解决方案很简单,在评论中也有提及。正如这个问题中提到的,表单发送错误,Flask ,以及Sean Vieira指出的那样,

...问题是,当 Flask 无法在参数和表单字典中找到键时,它会引发 HTTP 错误。Flask 默认假设,如果您请求某个特定键,而该键不存在,则请求中会遗漏某些内容,整个请求无效。

换句话说,如果您在 Python 中请求的表单元素只有一个在 HTML 中找不到,则 POST 请求无效,并会出现错误,在我的情况下,回溯没有任何异常。对我来说,这是拼写不一致的问题:在 HTML 中,我标记了各种表单输入

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

而在 Python 中,当调用 POST 时,我会抓取一个不存在的表单

request.form['question1']

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

request.form['question1_field']
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   3911  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   2721  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Freshdesk、ClickUp、nTask、Hubstaff、Plutio、Productive、Targa、Bonsai、Wrike。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在项目管理过程中面临着诸多痛点,如任务分配不...
项目管理系统   61  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Monday、TeamGantt、Filestage、Chanty、Visor、Smartsheet、Productive、Quire、Planview。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多项目经理和团队在管理复杂项目时,常...
开源项目管理工具   61  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Smartsheet、GanttPRO、Backlog、Visor、ResourceGuru、Productive、Xebrio、Hive、Quire。在当今快节奏的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在选择项目管理工具时常常面临困惑:...
项目管理系统   54  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用