在 Flask 应用程序中提交表单时出现 Bad Request 错误的原因是什么?
- 2025-02-27 09:05:00
- admin 原创
- 79
问题描述:
在阅读了许多类似的问题和相关的 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">
...
大多数人的问题不是调用GET
或POST
,但我在两个函数中都这样做,我仔细检查以确保我导入了所有必要的内容,例如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']
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD