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
相关产品推荐
相关产品推荐

