Get data from WTForms form

The most probable place for you to do things with the Form.attrs is in the index function. I have added some conditional guards on the method param. You want to do different things if they are using GET or POST as well. There are other ways to do all of this but I didn't want to change too much at once. But you should think about it clearly this way. If I have no form data because I've just made the initial request, I'm going to be using GET. Once I render the form in the template, I'm going to be sending a POST (as you can see in the top of your template). So I need those two cases dealt with firstly.

Then, once the form is rendered and returned I will have data or no data. So dealing with the data is going to happen in the POST branch of the controller.

@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():
            # 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.
            # 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
            return render_template('index.html',
                                   title='Application Form',
    elif request.method == 'GET':
        return render_template('index.html', 
                               title='Application Form',

To help, I'm adding a simple example from some of my working code. You should be able to follow it given your code and my walk through.

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)
            flash('Succesfully created new brochure: {0}'.format(
            new_brochure = Brochure(,
            return redirect('brochures')
    elif request.method == 'GET':
        return render_template('create-brochure.html', form=form)

Each field has a data attribute containing the processed data.

the_email =

Working with form data is described in the getting started doc.