Наиболее вероятное место для вас, чтобы делать вещи с помощью Form.attrs, находится в функции index
. Я добавил некоторые условные охранники на параметр param. Вы хотите делать разные вещи, если они используют GET
или POST
. Есть и другие способы сделать все это, но я не хотел слишком сильно меняться. Но вы должны думать об этом четко таким образом. Если у меня нет данных формы, потому что я только что сделал первоначальный запрос, я буду использовать GET
. Как только я отрисую форму в шаблоне, я собираюсь отправить POST
(как вы можете видеть в верхней части шаблона). Поэтому мне нужны эти два дела, которые касаются прежде всего.
Затем, как только форма будет обработана и возвращена, у меня будут данные или данные. Поэтому работа с данными будет происходить в ветке контроллера POST
.
@app.route('/index', methods=['GET', 'POST'])
def index():
errors = ''
form = ApplicationForm(request.form)
if request.method == 'POST':
if form.is_submitted():
print "Form successfully submitted"
if form.validate_on_submit():
flash('Success!')
# Here I can assume that I have data and do things with it.
# I can access each of the form elements as a data attribute on the
# Form object.
flash(form.name.data, form.email.data)
# I could also pass them onto a new route in a call.
# You probably don't want to redirect to `index` here but to a
# new view and display the results of the form filling.
# If you want to save state, say in a DB, you would probably
# do that here before moving onto a new view.
return redirect('index')
else: # You only want to print the errors since fail on validate
print(form.errors)
return render_template('index.html',
title='Application Form',
form=form)
elif request.method == 'GET':
return render_template('index.html',
title='Application Form',
form=form)
Чтобы помочь, я добавляю простой пример из некоторого моего рабочего кода. Вы должны быть в состоянии следовать за ним, учитывая свой код и мою прогулку.
def create_brochure():
form = CreateBrochureForm()
if request.method == 'POST':
if not form.validate():
flash('There was a problem with your submission. Check the error message below.')
return render_template('create-brochure.html', form=form)
else:
flash('Succesfully created new brochure: {0}'.format(form.name.data))
new_brochure = Brochure(form.name.data,
form.sales_tax.data,
True,
datetime.datetime.now(),
datetime.datetime.now())
db.session.add(new_brochure)
db.session.commit()
return redirect('brochures')
elif request.method == 'GET':
return render_template('create-brochure.html', form=form)
Wow thanks, я не ожидал, что вы займетесь этой деталью. Это хорошо помогает! –
nps. @davidism правильный, и супер умный. Я просто почувствовал, что у вас больше проблем, чем вы просили, и поэтому хотели предоставить какой-то контекст. Удачи. –
Вы были правы, я просто начинаю, спасибо за вашу помощь! –