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

