Функции вида мое игрушечном приложения было:Post/Redirect/Get шаблона в колбе
@app.route('/', methods=['GET', 'POST'])
def index():
name = None
form = NameForm()
if form.validate_on_submit():
name = form.name.data
form.name.data = ''
return render_template('index.html', form=form, name=name)
И это выглядит, когда я использую PRG:
@app.route('/', methods=['GET', 'POST'])
def index():
form = NameForm()
if form.validate_on_submit():
session['name'] = form.name.data
return redirect(url_for('index'))
return render_template('index.html', form=form, name=session.get('name'))
Как вы можете видеть, Строка form.name.data = ''
используется для очистки поля ввода в первой версии, но это не обязательно во второй версии. Я думал, что Flask-WTF автоматически передаст текст в StringField
в новый экземпляр form
, но по некоторым причинам он этого не сделал.
Мой вопрос: Почему form.name.data
больше не доступен между различными запросами, когда я использую PRG?
Вы подразумеваете, что в первой версии, когда я нажимаю кнопку отправки, «старый» запрос отправляется снова? –
Текущий запрос завершается и отправляет ответ. Но перенаправление - это указание браузеру запрашивать новую страницу, что означает новый запрос и новый вызов обработчика. –
Gotcha, но в первой версии, это не «совершенно новый запрос», который отправляется каждый раз, когда пользователь нажимает кнопку отправки? Или, другими словами, вы имеете в виду, что в первой версии обработчик 'index' фактически вызывается только один раз? –