Python 表单发送错误,Flask
有两个Python 表单发送错误,Flask,python,forms,flask,Python,Forms,Flask,有两个的表单。但当我发送它时,第二次提交会导致错误 布局: 第一次提交(添加)效果良好,但第二次提交(删除)…: 错误请求浏览器(或代理)发送了此服务器无法理解的请求 如何修复此错误 UPD: 这很简单: request.form返回ImmutableMultiDict: ... if 'Like' in request.form.values(): ... elif 'Dislike' in request.form.values(): ... 您应该检查'add'和'
的表单。但当我发送它时,第二次提交会导致错误
布局:
第一次提交(添加)效果良好,但第二次提交(删除)…:
错误请求浏览器(或代理)发送了此服务器无法理解的请求
如何修复此错误
UPD:
这很简单:
request.form返回ImmutableMultiDict:
...
if 'Like' in request.form.values():
...
elif 'Dislike' in request.form.values():
...
您应该检查
'add'
和'remove'
键是否在请求表中
if request.method == 'POST':
if 'add' in request.form:
return redirect(url_for('index'))
elif 'remove' in request.form:
return redirect(url_for('index'))
当您单击Like时,它不会失败,因为第一个条件已满足,因此第二个条件从未被选中。但是,如果单击“不喜欢”按钮,第一个条件将抛出一个KeyError
异常,因为request.form
不包含@Blubber指出的名为'add'的键,问题是Flask在args
和form
字典中找不到键时会引发HTTP错误。Flask默认假设的是,如果您请求的是一个特定的密钥,但它不在那里,那么请求中会遗漏一些内容,整个请求无效
还有两种很好的方法来处理您的情况:
使用请求。表单
的。获取
方法:
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.
#在你的代码里
if request.form[“action”]=“Like”:
#等等。
使用
代替
。我与您有相同的错误,并尝试了许多解决方案,但没有一个成功没有任何其他错误,尽管调试模式已打开。我已经尝试了你的变体,但是又出现了一个错误:400个错误请求。我假设你在代理后运行Flask?您确定终端(或启动应用程序的任何地方)没有异常吗?不,我没有在代理后运行Flask。我已尝试尝试/排除block:400:错误请求。在终端中没有任何其他例外。我还尝试制作两个表单,每个表单中有一个提交按钮,但结果是一样的:第二次提交导致400个错误。在这种情况下没有其他错误。没有追踪。我在模板中使用了“id”,它抛出了400个错误请求。然后我把它改为“name”,请求现在被接受了。谢谢你他的行为有点出乎意料。至少希望有一个日志行或回溯。@如果错误消息信息太多,就会有安全问题。尽管如此,我还是希望错误日志中有一些不那么神秘的东西。我一直在重新学习烧瓶中400个错误请求的含义。请参阅此链接:
if request.form.get('add', None) == "Like":
# Like happened
elif request.form.get('remove', None) == "Dislike":
# Dislike happened
<input type="submit" name="action" value="Like">
<input type="submit" name="action" value="Dislike">
# and in your code
if request.form["action"] == "Like":
# etc.