Flask логика маршрутизации - PullRequest
0 голосов
/ 09 мая 2020

У меня проблемы с осознанием логики c маршрутизации flask. Например, приведенный ниже фрагмент может обрабатывать регистрационную форму. Сложность (для меня) в том, что form.validate_on_submit() logi c - это до рендеринга шаблона. То есть, когда пользователь получает возможность отправить что-то в форму, функция уже находится в операторе возврата, за form.validate_on_submit() logi c.

Тем не менее, этот пример все еще работает. Я хотел бы понять, как можно выполнить лог c в функции даже после того, как был достигнут ее оператор возврата.

@app.route('/', methods=('GET', 'POST'))
def contact():
    form = ContactForm()
    if form.validate_on_submit():
        return redirect(url_for('success'))
    return render_template('index.html', form=form)

Спасибо!

1 Ответ

0 голосов
/ 09 мая 2020

Ключевой концепцией здесь является условное выражение if.

Что вам не хватает, так это тот факт, что form.validate_on_submit - это удобная функция , что эквивалентно выражению

if request.method=="POST" and form.validate():
    # ...

Вы можете увидеть пример, где это показано здесь

Когда страница загружается впервые, она отправляется с запросом GET . Мы выполняем первую строку form = ContactForm() и, поскольку наше условное выражение не оценивается как True , чего не будет, поскольку это не запрос POST , мы go переходим к последней строке и визуализируем шаблон HTML, передавая форму.

Теперь, когда страница отображается для пользователя и они отправляют форму, мы отправляем запрос на по тому же маршруту, что и раньше, но с запросом POST . Теперь мы можем проверить форму и, предполагая, что все прошло проверку, мы можем запустить перенаправление.

Надеюсь на помощь, это определенно может немного сбить с толку, прежде чем вы действительно освоитесь с тем, на что смотрите!

...