2016-12-01 2 views
0

Как получить данные из формы WTForms после ее отправки? Я хочу получить электронное письмо, введенное в форму.Получить данные из формы WTForms

class ApplicationForm(Form): 
    email = StringField() 

@app.route('/', methods=['GET', 'POST']) 
def index(): 
    form = ApplicationForm() 

    if form.validate_on_submit(): 
     return redirect('index') 

    return render_template('index.html', form=form) 
<form enctype="multipart/form-data" method="post"> 
    {{ form.csrf_token }} 
    {{ form.email }} 
    <input type=submit> 
</form> 

ответ

0

Каждое поле имеет атрибут data, содержащий обработанные данные.

the_email = form.email.data 

Работа с формой данных описана в getting started doc.

0

Наиболее вероятное место для вас, чтобы делать вещи с помощью 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) 
+0

Wow thanks, я не ожидал, что вы займетесь этой деталью. Это хорошо помогает! –

+0

nps. @davidism правильный, и супер умный. Я просто почувствовал, что у вас больше проблем, чем вы просили, и поэтому хотели предоставить какой-то контекст. Удачи. –

+0

Вы были правы, я просто начинаю, спасибо за вашу помощь! –

Смежные вопросы