2016-09-11 6 views
0

Функции вида мое игрушечном приложения было: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?

ответ

1

Он не может передать ничего на перенаправление, так как это совершенно новый запрос.

+0

Вы подразумеваете, что в первой версии, когда я нажимаю кнопку отправки, «старый» запрос отправляется снова? –

+0

Текущий запрос завершается и отправляет ответ. Но перенаправление - это указание браузеру запрашивать новую страницу, что означает новый запрос и новый вызов обработчика. –

+0

Gotcha, но в первой версии, это не «совершенно новый запрос», который отправляется каждый раз, когда пользователь нажимает кнопку отправки? Или, другими словами, вы имеете в виду, что в первой версии обработчик 'index' фактически вызывается только один раз? –