Найти - Пользователи
Полная версия: [wtforms, flask] Отправка формы
Начало » Web » [wtforms, flask] Отправка формы
1
boligolov
А правильно я понимаю, что после успешной отправки формы form.validate_on_submit или после request.method == POST flask опять их перезаполняет, значениями, которые были отправлены?


plusplus
Допустим есть урл /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 и будет всё понятно.
boligolov
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
фигня получилась…
когда по GET приходишь, изменяешь значение поля, то шлет значение по-которому пришел…
plusplus
boligolov
plusplusТ.е. если отправляю форму и хочу прибавить единицу после успешной отправки в одном из полей я могу сделать так:

def index():
    form = Form()
    if form.validate_on_submit():
        form.field.data += 1
        do_something()
    return render_template('add.html', form=form)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB