You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask中表单按钮值返回None的问题排查求助

问题解决:Flask中点击按钮获取值返回None

核心原因

你的表单默认使用GET请求,但在Flask路由里用了request.form.get()——这个方法仅用于获取POST请求的表单数据,因此无法拿到按钮的value值。另外,你的数据库更新操作缺少事务提交步骤,即便拿到id也无法真正修改数据库内容。

解决方案

方案1:改用POST请求(推荐,更安全)

修改HTML表单,指定请求方法为POST:

{% if x[4] == 0 %}
    <form action="/click" method="POST">
        <button name="doneBtn" class="habits" style="background-color: {{x[2]}};" value="{{x[0]}}">
            <p class="btnText content">{{x[1]}}</p>
            <i class="{{x[3]}} habitIcons content"></i>
        </button>
    </form>
{% endif %}

修改Flask路由,支持POST方法并添加事务提交:

@app.route("/click", methods=["POST"])
def click():
    id = request.form.get("doneBtn")
    print(id)
    if id:  # 避免None导致数据库执行错误
        cursor.execute("UPDATE info SET clicked = 1 WHERE id = ?", [id])
        conn.commit()  # 提交事务,确保修改写入数据库
    return redirect("/")

方案2:继续使用GET请求(不推荐用于更新操作)

如果坚持使用GET请求,将路由里的request.form.get()替换为request.args.get():

@app.route("/click")
def click():
    id = request.args.get("doneBtn")
    print(id)
    if id:
        cursor.execute("UPDATE info SET clicked = 1 WHERE id = ?", [id])
        conn.commit()
    return redirect("/")

额外检查项

  • 查看HTML页面源码,确认按钮的value属性是否正确渲染了x[0]的值。
  • 确保数据库连接对象(示例中的conn)已正确初始化,避免提交事务时出错。

内容的提问来源于stack exchange,提问作者Hassanein ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 11:14:58