表单发送错误,Flas

有两个<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'))
...

第一次提交(添加)效果很好,但是第二次(删除)...:

错误的请求浏览器(或代理)发送了该服务器无法理解的请求。

我该如何解决此错误?

UPD:

这很简单:request.form返回ImmutableMultiDict:

... 
if 'Like' in request.form.values():
     ...
elif 'Dislike' in request.form.values():
     ...
dimazubrik asked 2019-11-19T01:33:42Z
2个解决方案
87 votes

正如@Blubber指出的那样,问题在于Flask在2620425603182182720和.get字典中找不到密钥时会引发HTTP错误。 Flask默认情况下假设的是,如果您要的是一个特定的密钥,而该密钥不存在,则请求中遗漏了某些内容,整个请求均无效。

还有两种其他方法可以处理您的情况:

  1. 使用<input type="submit" name="action" value="Like"> <input type="submit" name="action" value="Dislike"> # and in your code if request.form["action"] == "Like": # etc. .get方法:

    <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. 对两个提交元素使用相同的<input type="submit" name="action" value="Like"> <input type="submit" name="action" value="Dislike"> # and in your code if request.form["action"] == "Like": # etc. 属性:

    <input type="submit" name="action" value="Like">
    <input type="submit" name="action" value="Dislike">
    
    # and in your code
    if request.form["action"] == "Like":
        # etc.
    
Sean Vieira answered 2019-11-19T01:34:34Z
3 votes

您应检查'add'字典中是否包含KeyErrorrequest.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'的键。

Blubber answered 2019-11-19T01:35:06Z
translate from https://stackoverflow.com:/questions/8552675/form-sending-error-flask