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

Flask获取radio button值触发werkzeug BadRequestKeyError 400错误咨询

错误原因
  • 你的接口同时支持GET和POST请求,但是代码没有区分请求类型,直接在所有请求逻辑里读取request.form["submission"]:当用户通过地址栏访问/提交GET请求时,request.form为空,不存在submission字段,直接用方括号取值就会抛出400 KeyError。
  • 就算是POST请求,如果用户未选中对应单选按钮直接点击提交,表单也不会携带submission字段,同样会触发报错。
修复方案

1. 区分GET/POST请求逻辑

只有请求方法为POST时才读取表单字段,GET请求仅负责渲染页面。

2. 使用安全的表单取值方式

用request.form.get("submission")替代方括号直接取值,字段不存在时会返回None而非抛出异常,你可以自行判断处理未选择的场景。

修改后的Flask后端代码参考:

@app.route("/submissions", methods=['GET', 'POST'])
@login_required
def submissions():
    user = User.query.filter_by(email=current_user.email).first_or_404()
    if user.user_type == "Artist":
        page = request.args.get('page', 1, type=int)
        submissions = Upload.query.filter_by(artist=current_user)\
            .order_by(Upload.date_submission.desc())\
            .paginate(page=page, per_page=5)   
        # 仅POST请求时处理表单
        if request.method == "POST":
            selected_song = request.form.get("submission")
            # 可在这里加判断:如果selected_song为None,提示用户先选择歌曲
            if selected_song:
                print(selected_song)
                # 后续业务逻辑写在此处
        return render_template('submissions.html', submissions=submissions, title='Submit')
    else:
        return render_template('submissions.html')

可选前端优化:给单选按钮添加required属性,强制用户选择后才能提交,从前端先做一层校验,修改后的单选按钮代码如下:

<input type="radio" name="submission" value="{{submission.id}}" required>

内容的提问来源于stack exchange,提问作者Adventure-Knorrig

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 15:54:01