Flask POST请求中传递feature_id值为空的问题求助
问题描述
我需要在POST请求时传递feature_id值,但用以下代码获取到的是null。第一段代码中,GET请求时print语句能输出feature_id的有效值,但POST提交时该值为空;将feature_id硬编码为24后,数据可成功提交。我还尝试了第二段代码,在POST代码块内直接通过request.args.get获取feature_id,同样无法得到有效值。
第一段代码
@app.route("/add_user_story", methods=["GET", "POST"]) @login_required def add_user_story(): feature_id=request.args.get("feature_id") print(feature_id) if request.method == "POST": user_story = User_stories( user_id=session["user"], feature_id =feature_id, as_a=request.form.get("as_a"), i_want=request.form.get("i_want"), so_that=request.form.get("so_that"), given=request.form.get("given"), when=request.form.get("when"), then=request.form.get("then") ) db.session.add(user_story) db.session.commit() return render_template("logged_in/add_user_story.html")
第二段代码
# LOGGED IN - Add User Story @app.route("/add_user_story", methods=["GET", "POST"]) @login_required def add_user_story(): if request.method == "POST": user_story = User_stories( user_id=session["user"], feature_id=request.args.get("feature_id"), as_a=request.form.get("as_a"), i_want=request.form.get("i_want"), so_that=request.form.get("so_that"), given=request.form.get("given"), when=request.form.get("when"), then=request.form.get("then") ) db.session.add(user_story) db.session.commit() return render_template("logged_in/add_user_story.html")
解决方案
问题核心是request.args.get只能获取URL查询参数中的值,而POST请求提交时,feature_id并没有被包含在查询参数里。以下是两种可行的解决办法:
- 方法一:通过隐藏表单字段传递
feature_id
在add_user_story.html模板的表单中添加隐藏字段,把GET请求时拿到的feature_id存入:
<form method="POST"> <input type="hidden" name="feature_id" value="{{ feature_id }}"> <!-- 其他表单输入字段 --> </form>
后端代码修改为POST时从表单获取feature_id:
@app.route("/add_user_story", methods=["GET", "POST"]) @login_required def add_user_story(): feature_id = request.args.get("feature_id") # GET请求时获取参数 if request.method == "POST": # POST请求时从表单取值 feature_id = request.form.get("feature_id") user_story = User_stories( user_id=session["user"], feature_id=feature_id, as_a=request.form.get("as_a"), i_want=request.form.get("i_want"), so_that=request.form.get("so_that"), given=request.form.get("given"), when=request.form.get("when"), then=request.form.get("then") ) db.session.add(user_story) db.session.commit() return render_template("logged_in/add_user_story.html", feature_id=feature_id)
- 方法二:将
feature_id嵌入URL路径
修改路由定义,把feature_id作为URL的一部分,这样GET和POST请求都能直接捕获该值:
@app.route("/add_user_story/<int:feature_id>", methods=["GET", "POST"]) @login_required def add_user_story(feature_id): print(feature_id) # GET/POST请求都能获取到值 if request.method == "POST": user_story = User_stories( user_id=session["user"], feature_id=feature_id, as_a=request.form.get("as_a"), i_want=request.form.get("i_want"), so_that=request.form.get("so_that"), given=request.form.get("given"), when=request.form.get("when"), then=request.form.get("then") ) db.session.add(user_story) db.session.commit() return render_template("logged_in/add_user_story.html")
此时访问页面的URL格式为/add_user_story/24,无需额外传递查询参数。
内容的提问来源于stack exchange,提问作者Barry Marples
相关产品推荐
相关产品推荐

