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
相关产品推荐
相关产品推荐

