Есть обычная форма. У меня не получается после её сабмита проверить её валидность. Помогите пожалуйста разобраться.
класс формы:
class SearchForm(FlaskForm):
searcher = SelectField(
'Поисковик',
choices=[(item.id, item.searcher) for item in Searcher.query.all()],
validators=[DataRequired()]
)
query = StringField('Запрос', validators=[DataRequired()])
submit = SubmitField('Найти')
соответствующая разметка:
{% extends "base.html" %}
{% block content %}
<form action="/search" method="POST" novalidate>
{{ search_form.hidden_tag() }}
<div>
{{ search_form.searcher }}
{{ search_form.query(size=32) }}
{{ search_form.submit() }}
</div>
</form>
{% endblock %}
После сабмита в отладчике хрома видно, что уходит POST-запрос с заполненными значениями query, searcher, csrf_token. Код возврата 200
роут:
@app.route('/', methods=['GET', 'POST'])
@app.route('/search', methods=['GET', 'POST'])
def search():
print(request.form)
search_form = SearchForm()
if request.method == 'POST' and search_form.validate_on_submit():
print('form is valid')
else:
print('form is not valid')
return render_template('search.html', title='Поиск', search_form=search_form)
Проблема видна в выводе консоли:
flask run
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
ImmutableMultiDict([])
form is not valid
127.0.0.1 - - [23/Apr/2019 10:01:50] "GET /search HTTP/1.1" 200 -
ImmutableMultiDict([('submit', 'Найти'), ('searcher', '1'), ('query', 'gg'), ('csrf_token', 'ImFiMzFjM2IzOWJlNTU2YjBlYjcxNzA3MTUyYzMxZGUwYzdmNTk5YjQi.XL64Xg.EYYAUzvlpnlYScpPqt5Z8xXVvUg')])
form is not valid
127.0.0.1 - - [23/Apr/2019 10:01:53] "POST /search HTTP/1.1" 200 -
Видно, что первый раз(когда форма отрисовывается), выводится "form is not valid". А после сабмита роут снова выводит "form is not valid", хотя при этом форма валидна и есть csrf-токен
Полный код
здесь