Форма Flask, сохранение значений после отправки

#flask #flask-wtforms

#flask #flask-wtforms

Вопрос:

У меня есть форма flask, которая имеет некоторые значения для данного события. При отправке я перенаправляю пользователя на страницу, где я беру значения из формы и вычисляю некоторую статистику о событии. Пользователь может принять эти значения и отправить событие в базу данных или нажать кнопку редактирования, которая вернет их обратно в форму, чтобы изменить значения. Проблема в том, что форма уже отправлена, когда они нажимают «Редактировать» и перенаправляются обратно в форму, все значения исчезают. Я хочу, чтобы значения оставались, потому что, скорее всего, они будут изменять только одно или два поля, и я не хочу, чтобы им приходилось повторно вводить их все. Есть идеи, как это сделать?

Комментарии:

1. Трудно сказать, не видя никакого кода. Но почему вы не можете сохранить значения в базе данных и загрузить значения при открытии формы? Если пользователь хочет отредактировать значения, вы просто обновляете значения в БД. Или вы не можете сохранить значения в глобальном словаре и просто повторно загрузить его, когда вернетесь к форме, если некоторые значения в словаре существуют? Опять же, трудно сказать, поскольку у вас нет примера кода, но это всего лишь некоторые мысли, о которых вы можете подумать.

2. @Payam спасибо за ответ! В настоящее время я сохраняю в глобальном dict, что просто не казалось самым чистым способом сделать это. Я новичок в flask, поэтому я не знал, есть ли чистый способ, которым форма flask может справиться с этим. if (current_user.username in current_app.config["current_form"] and request.method != "POST"): form = current_app.config["current_form"][current_user.username] else: form = Form()

Ответ №1:

Вы можете позволить Flask-wtf автоматически генерировать форму, и она может запоминать вводимые пользователем данные. Если вы передаете экземпляр формы в свой шаблон Jinja следующим образом:

 form = SomeForm()
return render_template("template.html", form=form)
 

Минимальный пример формы:

 class SomeForm(FlaskForm):
    name = TextField(label='name', default="")
    save = SubmitField(label='Save', description="Save")
 

И в вашем шаблоне Jinja:

 <form method="post" action="the url" class="form-inline">
    <ul>
        {% for field in form %}
        <li>{{ field.label }} {{ field }}</li>
        {% endfor %}
    </ul>
</form>
 

Ответ №2:

Вы можете использовать window.history.back(); .

Из History API: «Это действует точно так же, как если бы пользователь нажал кнопку «Назад» на панели инструментов своего браузера»

Это работает, потому что браузер сохраняет входные данные пользователей, все type="password" , кроме