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

Flask应用调用/recms POST接口返回400错误的原因及解决方法

问题根本原因

请求传递的JSON参数键名与代码中预期的键名不匹配:

  • 代码中从请求JSON里读取的键为title(movie = data["title"])
  • 实际curl请求中传递的键为movie_title({"movie_title":"Heat (1995)"})

这种不匹配会导致代码尝试访问不存在的键,同时由于该操作未被异常捕获,最终触发Flask返回400错误请求。

修复方案

有两种直接的修复方式,任选其一即可:

方式一:修改代码适配请求参数

将代码中读取参数的键名改为movie_title,同时把参数读取逻辑纳入异常捕获范围,避免参数缺失引发未处理异常:

@app.route("/recms", methods = ["POST"])
def make_rec():
    if request.method == "POST":
        data = request.json
        try: 
            movie = data["movie_title"]  # 匹配请求中的键名
            similar_score = item_similarity_df[movie]
            similar_movies = similar_score.sort_values(ascending=False)[1:50]
            api_recommendations = similar_movies.index.to_list()
        except KeyError:
            api_recommendations = ['缺少电影标题参数']
        except Exception:
            api_recommendations = ['未找到该电影']
        return {"rec_movie":api_recommendations}

方式二:修改curl请求适配代码

调整curl命令的JSON参数,将键名改为title:

curl -X POST http://192.168.1.106:80/recms -H 'Content-Type: application/json' -d '{"title":"Heat (1995)"}'

额外优化建议

为增强接口健壮性,建议增加对请求JSON格式的校验,避免因请求未正确传递JSON导致的异常:

@app.route("/recms", methods = ["POST"])
def make_rec():
    if request.method == "POST":
        data = request.json
        if not data:
            return {"rec_movie": ["无效的JSON请求"]}, 400
        try: 
            movie = data["title"]  # 或对应修改后的movie_title
            similar_score = item_similarity_df[movie]
            similar_movies = similar_score.sort_values(ascending=False)[1:50]
            api_recommendations = similar_movies.index.to_list()
        except KeyError:
            api_recommendations = ['缺少必填参数:title']
        except Exception:
            api_recommendations = ['未找到该电影']
        return {"rec_movie":api_recommendations}

内容的提问来源于stack exchange,提问作者Ren Ping Ong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:01:04