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

Flask_WTF/Python:执行HTML POST后初始值变为None的问题排查

问题原因分析

核心问题是请求方式不同,参数的获取位置不匹配:

  • GET请求时,id通过URL参数(如/edit?id=1)传递,request.args.get("id")能正确拿到值。
  • POST请求时,id是放在表单hidden字段里提交的表单数据,request.args中不存在该参数,因此request.args.get("id")返回None,导致后续数据库查询也拿不到对应的movie_edit。
解决方案

修改edit路由中获取movie_id的逻辑,同时兼容GET和POST两种请求的参数来源:

@app.route("/edit", methods=["GET", "POST"])
def edit():
    # 优先从URL参数取(GET场景),取不到则从表单数据取(POST场景)
    movie_id = request.args.get("id") or request.form.get("id")
    movie_edit = MovieDB.query.get(movie_id)

    print(movie_id, movie_edit)

    form_edit = EditForm()
    if form_edit.validate_on_submit():
        # 直接复用已获取的movie_edit,无需重复查询数据库
        if movie_edit:
            movie_edit.rating = form_edit.rating.data
            movie_edit.review = form_edit.review.data
            db.session.commit()
        return redirect(url_for("home"))
    return render_template("edit.html", movie=movie_edit, form=form_edit)

额外优化建议:

  • 可以增加判断逻辑,若movie_edit为None,返回404页面或提示信息,避免模板渲染时因movie为空报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 16:55:25