Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 8, 2019 14:00:03

freeddos
Зарегистрирован: 2019-08-04
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Flask WTF передача переменных (валидаторы форм)

Здравствуйте.
Ситуация следующая, имеется одна страничка на которой располагается сгенерированная 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)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version