在 Flask 中,如何获取 HTML 表单数据?
以下是 HTML 表单代码:
<form action='quiz_answers'>
<p> Question1? </p>
<input type="radio" name="q1" value="2">Answer1</input>
<input type="radio" name="q1" value="1">Answer2</input>
<input type="radio" name="q1" value="0">Answer3</input>
<input type="radio" name="q1" value="0">Answer4</input>
<p> Question2? </p>
<input type="radio" name="q2" value="2">Answer1</input>
<input type="radio" name="q2" value="1">Answer2</input>
<input type="radio" name="q2" value="0">Answer3</input>
<input type="radio" name="q2" value="0">Answer4</input>
</form>
以下是 Python 代码:
from flask import Flask, render_template, request
app = Flask(__name__)
@app.route('/quiz')
def quiz():
return render_template('quiz.html')
@app.route('/quiz_answers', methods=['POST'])
def quiz_answers():
q1 = request.form['q1']
q2 = request.form['q2']
q4 = request.form['q4']
q5 = request.form['q5']
if __name__ == "__main__":
app.debug = True
app.run(host='0.0.0.0')
用户希望在回答问题 1 和 2 后,点击一个按钮,然后打开一个新的模板,其中包含结果。
解决方案
要解决这个问题,可以使用 Flask 的 request.form 对象。request.form 对象包含了所有表单数据。
以下是如何修改 Python 代码以获取表单数据:
from flask import Flask, render_template, request
app = Flask(__name__)
@app.route('/quiz')
def quiz():
return render_template('quiz.html')
@app.route('/quiz_answers', methods=['POST'])
def quiz_answers():
q1 = request.form.get('q1')
q2 = request.form.get('q2')
# 计算结果
return render_template('results.html', q1=q1, q2=q2)
if __name__ == "__main__":
app.debug = True
app.run(host='0.0.0.0')
在这个代码中,我们使用 request.form.get() 方法来获取表单数据。request.form.get() 方法有两个参数:
name:表单元素的名称。default:如果表单元素不存在,则返回的默认值。
在上面的代码中,我们使用 request.form.get('q1') 和 request.form.get('q2') 来获取表单元素 q1 和 q2 的值。如果表单元素不存在,则返回 None。
然后,我们可以使用这些值来计算结果,并将结果渲染到一个新的模板中。
以下是如何修改 HTML 代码以添加一个提交按钮:
<form action='quiz_answers' method="POST">
<p> Question1? </p>
<input type="radio" name="q1" value="2">Answer1</input>
<input type="radio" name="q1" value="1">Answer2</input>
<input type="radio" name="q1" value="0">Answer3</input>
<input type="radio" name="q1" value="0">Answer4</input>
<p> Question2? </p>
<input type="radio" name="q2" value="2">Answer1</input>
<input type="radio" name="q2" value="1">Answer2</input>
<input type="radio" name="q2" value="0">Answer3</input>
<input type="radio" name="q2" value="0">Answer4</input>
<input type="submit" value="Submit" />
</form>
在这个代码中,我们添加了一个 <input type="submit" value="Submit" /> 元素。当用户点击这个按钮时,表单数据将被提交到 /quiz_answers 路由。
然后,Flask 将调用 quiz_answers() 函数来处理请求。quiz_answers() 函数将获取表单数据,计算结果,并将结果渲染到一个新的模板中。