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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 09:15:35