Ошибка отправки формы, колба
есть форма с двумя <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'))
...
первый submit(add) работает хорошо, но второй (remove)...:
Неверный Запрос браузер(или прокси) послал запрос, что этот сервер не мог понять.
как я могу это исправить ошибка?
UPD:
Это было довольно просто: запрос.форма возвращает ImmutableMultiDict:
...
if 'Like' in request.form.values():
...
elif 'Dislike' in request.form.values():
...
2 ответа:
как указывает @Blubber, проблема в том, что Flask вызывает ошибку HTTP, когда он не может найти ключ в
args
иform
словари. То, что Flask предполагает по умолчанию, это то, что если вы просите определенный ключ а его там нет затем что-то осталось из запроса и весь запрос является недействительным.есть два других хороших способов справиться с вашей ситуацией:
использовать
request.form
' s.get
метод: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.
вы должны проверить, является ли
'add'
и'remove'
ключи вrequest.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'
.