Здравствуйте.
Ситуация следующая, имеется одна страничка на которой располагается сгенерированная WTForm
Класс формы
class Users_cl(FlaskForm):
name = StringField('name', [validators.DataRequired(), validators.Length(min=1, max=13, message='Имя не более 13 символов')])
codename = StringField('codename', validators = [DataRequired()])
На главную страничку помещаю эту форму и делаю просмотр
@app.route("/", methods=['GET','POST'])
@app.route("/index", methods=['GET','POST'])
def index():
form = User_cl()
return render_template('index.html', form=form)
На HTML передаются параметры и форма рисуется, все нормально.
Но на форме так же есть кнопка для добавления в базу.
Вот обработка кнопки
@app.route("/add_user", methods=['POST'])
def add_user():
form = User_cl(request.form)
if form.validate_on_submit():
user_to_db = User_db_cl(
name=form.name.data,
codename=form.codename.data)
db.session.add(user_to_db)
db.session.commit()
return redirect(url_for('index'))
else:
return redirect(url_for('index',form=form)) #тут кроется основная проблема
Данные в базу попадают, все работает.
Проблема начинается когда мне из /add_user нужно передать информацию на /index, а точнее форму т.к. мне нужно прочитать form.errors для полей и обработать их.
Тут такое наблюдение если делать через:
return render_template('index.html', form=form)
То тогда если будет больше информации (кроме form) передаваться на главную страницу то мне нужно будет в блоке /add_user все это прописывать (и в итоге у меня и в index и в add_user одинаковые блоки).
Поэтому думал передавать через redirect и url_for:
return redirect(url_for('index',form=form))
Получается основную логику входа на главную index я пропишу в блоке index. Но вот передать нормально form я в этот блок через redirect не могу. Есть информация что redirect не умеет делать POST (только GET, хотя есть информация о том что можно прописать code=307 в параметрах).
Как быть в этой ситуации? как обычно делают при передаче параметров в рамках одной страницы.
Спасибо за полезную информацию.
Отредактировано freeddos (Авг. 8, 2019 14:25:56)