有两个形式<input type="submit">。但是,当我发送它时,第二次提交会导致错误。
<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(): ...
正如@Blubber指出的那样,问题在于Flask在args和form字典中找不到键时会引发HTTP错误。Flask默认情况下假设的是,如果您要的是一个特定的密钥, 而该 密钥 不存在, 则请求中遗漏了某些内容,并且整个请求均无效。
args
form
还有两种其他方法可以处理您的情况:
使用request.form的.get方法:
request.form
.get
if request.form.get('add', None) == "Like": # Like happened
elif request.form.get(‘remove’, None) == “Dislike”: # Dislike happened
name对两个提交元素使用相同的属性:
name
<input type="submit" name="action" value="Like">
if request.form[“action”] == “Like”: # etc.