Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 表单发送错误,Flask_Python_Forms_Flask - Fatal编程技术网

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.