Уведомления

Группа в Telegram: @pythonsu

#1 Май 14, 2016 14:40:25

boligolov
От: СПб
Зарегистрирован: 2014-10-03
Сообщения: 51
Репутация: +  1  -
Профиль   Отправить e-mail  

[wtforms, flask] Отправка формы

А правильно я понимаю, что после успешной отправки формы form.validate_on_submit или после request.method == POST flask опять их перезаполняет, значениями, которые были отправлены?


Офлайн

#2 Май 16, 2016 14:26:53

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

[wtforms, flask] Отправка формы

Допустим есть урл /submit/ и для неё определен вью:

def index():
    form = Form()
    if form.validate_on_submit():
        do_something()
    return render_template('add.html', form=form)

Тот же самый код, только более наглядный:

def index():
    #request.form передается по дефолту, но я укажу его явно для наглядности
    form = Form(formdata=request.form)
    # Примерно такой код находится в  validate_on_submit
    if request.method = "POST" and form.validate():
        do_something()
    return render_template('add.html', form=form)

В этом вью когда человек открывает страницу /submit/, то выполняется GET-запрос, для него соответсвенно вызывается наша функция index, при этом в request.form - пусто, поэтому на странице будут пустые поля. Когда пользователь заполняет форму, то выполняется POST-запрос и в request.form уже будут данные и соответсвенно они будут переданы в форму и будут отображены на странице(если в случае успешного заполнения формы не стоит редирект куда-нибудь).

Я постарался доступно объяснить, нет никакой магии, форма сама никуда не отправляется и не перезаполняется. Просто надо пошагово пройтись по вью index и будет всё понятно.



Отредактировано plusplus (Май 16, 2016 14:27:16)

Офлайн

#3 Май 16, 2016 19:44:10

boligolov
От: СПб
Зарегистрирован: 2014-10-03
Сообщения: 51
Репутация: +  1  -
Профиль   Отправить e-mail  

[wtforms, flask] Отправка формы

plusplus
Т.е. если отправляю форму и хочу прибавить единицу после успешной отправки в одном из полей я могу сделать так:

def freeform():
	form = FreeForm()
	n = request.args.get("n")
	if n == None:
		if form.validate_on_submit():
			a = form.nomer1.data
			flash("Отправили %s и прибавили единицу в форму" % (a))
			a += 1
			return redirect ("/freeform?n="+str(a))
		else:
			flash_errors(form)
	else:
		form.nomer1.data = int(n)
		if form.validate_on_submit():
			a = form.nomer1.data
			flash("Отправили %s и прибавили единицу в форму" % (a))
			a += 1
			return redirect ("/freeform?n="+str(a))
		else:
			flash_errors(form)
	return render_template ("/freeform/fform.html", form = form)



Отредактировано boligolov (Май 16, 2016 19:44:58)

Офлайн

#4 Май 16, 2016 22:46:01

boligolov
От: СПб
Зарегистрирован: 2014-10-03
Сообщения: 51
Репутация: +  1  -
Профиль   Отправить e-mail  

[wtforms, flask] Отправка формы

фигня получилась…
когда по GET приходишь, изменяешь значение поля, то шлет значение по-которому пришел…

Офлайн

#5 Май 17, 2016 08:01:54

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

[wtforms, flask] Отправка формы

boligolov
plusplusТ.е. если отправляю форму и хочу прибавить единицу после успешной отправки в одном из полей я могу сделать так:

def index():
    form = Form()
    if form.validate_on_submit():
        form.field.data += 1
        do_something()
    return render_template('add.html', form=form)



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version