我最近开始学习 Flask,遇到了一个问题,当 1 个 html 文件有 2 个可以提交的表单时会发生这种情况。当只有一种表单时,不会发生此问题。
这是我包含flask的python文件:
from flask import Flask, request, render_template
app = Flask(__name__)
app.secret_key = 'secretkry'
@app.route("/", methods=["GET", "POST"])
def index():
if request.method == "POST":
if request.form["form_button_1"]:
return render_template('index.html', test_id="pressed form nr 1")
if request.form["form_button_2"]:
return render_template('index.html', test_id="pressed form nr 2")
return render_template('index.html', test_id="hasnt yet pressed form button")
if __name__ == '__main__':
app.run(port=44444)
这是我的index.html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="#" method="post">
<button name="form_button_1" type="submit" value="random_value1">form button 1</button>
</form>
<br>
<form action="#" method="post">
<button name="form_button_2" type="submit" value="random_value2">form button 2</button>
</form>
<p>{{test_id}}</p>
</body>
</html>
当我运行此文件时,我收到错误:400 Bad Request。当我在 index.html 中只有 1 个表单时,不会发生这种情况 (index.html 看起来像这样)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="#" method="post">
<button name="form_button_1" type="submit" value="random_value1">form button 1</button>
</form>
<br>
<p>{{test_id}}</p>
</body>
</html>
包含 Flask 的 python 文件看起来像这样
from flask import Flask, request, render_template
app = Flask(__name__)
app.secret_key = 'secretkry'
@app.route("/", methods=["GET", "POST"])
def index():
if request.method == "POST":
if request.form["form_button_1"]:
return render_template('index.html', test_id="pressed form nr 1")
return render_template('index.html', test_id="hasnt yet pressed form button")
if __name__ == '__main__':
app.run(port=44444)
同样,第一个示例不起作用,但第二个示例(只有 1 种形式)起作用。 我想知道当存在 2 个表单时如何提交单击的表单。我使用的是 Kali Linux,如果这有什么不同的话。提前致谢
出现 “400 Bad Request” 错误的原因是,当提交任何一个表单时,Flask 都试图同时访问两个按钮的
request.form
数据。如果一个按钮没有被按下,它的名字就不会出现在
request.form
中,从而导致错误。
解决这个问题的方法是,在检查按钮名称是否存在于
request.form
中之前,先检查它:
from flask import Flask, request, render_template
app = Flask(__name__)
app.secret_key = 'secretkry'
@app.route("/", methods=["GET", "POST"])
def index():
if request.method == "POST":
if "form_button_1" in request.form:
return render_template('index.html', test_id="pressed form nr 1")
elif "form_button_2" in request.form:
return render_template('index.html', test_id="pressed form nr 2")
return render_template('index.html', test_id="hasnt yet pressed form button")
if __name__ == '__main__':
app.run(port=44444)
在这个改进后的代码中:
-
我们使用
if "form_button_1" in request.form:
和elif "form_button_2" in request.form:
来分别检查每个按钮名称是否存在于request.form
字典中。 -
只有当按钮名称存在于
request.form
中时,我们才会执行相应的代码块。
这样就解决了 “400 Bad Request” 错误,并且的 Flask 应用现在可以正确处理来自两个表单的提交。
标签:python,html,flask From: 78802508