Flask 表单数据获取

50 阅读2分钟

在 Flask 中,如何获取 HTML 表单数据?

huake_00257_.jpg 以下是 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') 来获取表单元素 q1q2 的值。如果表单元素不存在,则返回 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() 函数将获取表单数据,计算结果,并将结果渲染到一个新的模板中。