阅读了许多类似的问题和相关的Flask文档后,我似乎无法弄清楚是什么导致在提交表单时生成以下错误:
400 Bad Request
The browser (or proxy) sent a request that this server could not understand.
虽然表单始终正确显示,但当我提交连接到这些函数之一的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表单中标记略有不同。保持名称一致是必须的。更多信息可以阅读这个问题:Form sending error, Flask
request.form
中访问的字段之一不存在(例如,你发送了name_feild
,但正在寻找name_field
- 注意拼写错误),因此会出现错误。(设置app.debug = True
将帮助你找到错误)。 - Sean Vieira