小编典典

表单发送错误,flask

python

有两个形式<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():
     ...

阅读 121

收藏
2021-01-20

共1个答案

小编典典

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

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

  1. 使用request.form.get方法:

    if request.form.get('add', None) == "Like":
    # Like happened
    

    elif request.form.get(‘remove’, None) == “Dislike”:
    # Dislike happened

  2. name对两个提交元素使用相同的属性:

    <input type="submit" name="action" value="Like">
    

    and in your code

    if request.form[“action”] == “Like”:
    # etc.

2021-01-20