Ошибка отправки формы, колба
Есть форма с двумя <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():
...
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'
,
Вместо
<input type="submit">
Использовать
<button type="submit">
. У меня такая же ошибка, как и у вас, и я пробовал много решений, но ничего из этого не работает