表单发送错误,Flask
- 2025-03-20 08:46:00
- admin 原创
- 41
问题描述:
有两个表格<input type="submit">
。但是当我发送它时,第二次提交会导致错误。
布局:
<form action="{{ url_for('index') }}" method="post">
<input type="submit" name="add" value="Like">
<input type="submit" name="remove" value="Dislike">
</form>
main.py:
...
if request.method == 'POST':
if request.form['add']:
return redirect(url_for('index'))
elif request.form['remove']:
return redirect(url_for('index'))
...
第一次提交(添加)效果很好,但第二次提交(删除)……:
错误请求浏览器(或代理)发送了该服务器无法理解的请求。
我该如何修复这个错误?
更新:
它非常简单: request.form 返回 ImmutableMultiDict:
...
if 'Like' in request.form.values():
...
elif 'Dislike' in request.form.values():
...
解决方案 1:
args
正如@Blubber 指出的那样,问题在于 Flask 在和字典中找不到键时会引发 HTTP 错误form
。Flask 默认假设,如果您请求某个特定键,而该键不存在,则请求中会遗漏某些内容,整个请求无效。
还有另外两种好方法可以解决你的情况:
使用
request.form
的.get
方法:
if request.form.get('add', None) == "Like":
# Like happened
elif request.form.get('remove', None) == "Dislike":
# Dislike happened
name
对两个提交元素使用相同的属性:
<input type="submit" name="action" value="Like">
<input type="submit" name="action" value="Dislike">
# and in your code
if request.form["action"] == "Like":
# etc.
解决方案 2:
您应该检查'add'
和'remove'
键是否在request.form
字典中。
if request.method == 'POST':
if 'add' in request.form:
return redirect(url_for('index'))
elif 'remove' in request.form:
return redirect(url_for('index'))
单击“赞”按钮不会失败,因为第一个条件已满足,因此第二个条件不会被检查。但如果单击“不喜欢”KeyError
按钮,则第一个条件将引发异常,因为request.form
不包含名为 的键'add'
。
解决方案 3:
而不是<input type="submit">
使用<button type="submit">
。我遇到了和你一样的错误,尝试了很多解决方案,但都不起作用
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD