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

Flask表单POST请求无法获取数据,请求技术协助

问题排查与修复方案

看了你的代码和错误日志,我发现几个核心问题导致POST请求无法正常获取表单数据,咱们一步步来解决:

1. 表单提交的目标路由不对

从错误日志里的 POST /grants/search HTTP/1.1" 400 - 能看出来,你的表单提交到了 /grants/search,但你处理POST请求的后端路由是 /searchgrantprogs,这就导致请求根本没走到正确的处理逻辑里。

你的前端表单action是空的,默认会提交到当前页面URL。你需要把action明确改成正确的路由:

<form id="grant_edit" action="/searchgrantprogs" method="POST">

2. 后端获取表单字段的变量名写错了

前端隐藏输入框的name是grant_id,但后端POST分支里写的是request.form.get('grantid')(少了下划线),这肯定拿不到值。而且你最后返回模板时用了未定义的grantid变量,这会直接引发报错。

修改后端POST部分的代码:

if request.method == 'POST':
    # 注意字段名是grant_id,和前端对应
    grant_id = request.form.get('grant_id')
    # 先打印调试,确认是否拿到值
    print(f"POST收到的grant_id: {grant_id}")
    
    # 这里可以添加你的业务逻辑,比如更新数据库等
    # 示例:如果需要操作grants_programmes表,写对应的SQL
    
    flash("更新成功!")
    return render_template('search_grants.html', grant_id=grant_id)

3. 额外的调试小技巧

  • 提交表单前,打开浏览器开发者工具(F12)的Network面板,查看POST请求的Form Data,确认grant_id是否被正确发送。
  • 后端可以直接打印整个request.form:print(request.form),这样能直观看到所有提交过来的字段,方便排查。
  • 400状态码一般是请求格式错误,比如路由不匹配、必填字段缺失,修复上面两个问题后应该就能解决。

另外,你的GET分支还有个小bug:你定义了grantid = request.args.get('grant_id'),但SQL查询里用的是固定值grant_id=0,应该改成用拿到的grantid:

if request.method == 'GET':
    sql_grantprogs = """SELECT grant_id, programme_id FROM grants_programmes WHERE grant_id=:a; """
    grantid = request.args.get('grant_id')
    print(grantid)
    # 这里要用拿到的grantid,而不是固定的0
    r_grantprogs = list(conn.execute(text(sql_grantprogs), a=grantid))
    return json.dumps([dict(r) for r in r_grantprogs])

这样调整后,POST请求应该就能正常获取到grant_id并执行后续逻辑了。

内容的提问来源于stack exchange,提问作者Clives-online

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:25:10