There is form with two <input type="submit">. But when i’m sending it, second submit causes error.
layout:
<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'))
...
First submit(add) works well, but second(remove)…:
Bad Request The browser(or proxy) sent a request that this server could not understand.
How can i fix this error?
UPD:
It was pretty simple:
request.form returns ImmutableMultiDict:
...
if 'Like' in request.form.values():
...
elif 'Dislike' in request.form.values():
...
As @Blubber points out, the issue is that Flask raises an HTTP error when it fails to find a key in the
argsandformdictionaries. What Flask assumes by default is that if you are asking for a particular key and it’s not there then something got left out of the request and the entire request is invalid.There are two other good ways to deal with your situation:
Use
request.form‘s.getmethod:Use the same
nameattribute for both submit elements: