Flask Forms: Accepting User Input

In the realm of web development, making websites interactive is like adding magic to a digital world. One powerful wand for this magic is Flask Forms. Imagine a tool that lets your website talk to users, collect information, and respond dynamically. That’s exactly what Flask Forms do, and in this guide, we’ll explore the wonders they bring to the table.

Understanding Flask Forms

Flask Forms are like online questionnaires for your website. They let users type in their name, email, or anything else you need. Without them, websites would be like one-way streets—information flowing out, but no way for users to give anything back.

Setting Up Flask Forms

Before we dive into the world of Flask Forms, we need to set up our web playground. Think of it as creating a digital canvas where we can draw our interactive masterpieces.

Step 1: Install Flask

Picture Flask as the painter’s brush. To use it, we need to install it. Open your command palette and type:

pip install Flask

Step 2: Create a Flask App

Now, let’s create a simple web app. Imagine it as an empty canvas waiting for our creative touch. Open a new file, name it app.py, and write:

from flask import Flask

app = Flask(__name__)

def home():
    return 'Hello, World!'

if __name__ == '__main__':

Run it, and voila! Your first web app says “Hello, World!”

The Need for Forms

Now, let’s talk about why forms matter. Imagine you’re booking tickets online. Without forms, you couldn’t tell the website how many tickets you want or where you want to sit. Forms bridge the communication gap between users and websites, turning static pages into dynamic experiences.

Creating a Basic Form

Let’s make our web app more exciting. We’ll create a simple contact form—like a digital suggestion box where users can drop their thoughts.

Step 1: Import FlaskForm

Imagine FlaskForm as the template for our suggestion box. Add this to app.py:

from flask_wtf import FlaskForm

Step 2: Create a Form Class

Now, let’s design our suggestion box. We need fields for the user’s name, email, and a submit button. Think of it as adding slots to our box:

from wtforms import StringField, SubmitField

class ContactForm(FlaskForm):
    name = StringField('Name')
    email = StringField('Email')
    submit = SubmitField('Submit')

Step 3: Render the Form

Let’s put our suggestion box on the web app. Modify the home route:

from flask import render_template

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

    if form.validate_on_submit():
        # Process form data (to be added later)

    return render_template('home.html', form=form)

Step 4: Create a Template

Now, create a folder named templates and inside it, a file named home.html:

<!DOCTYPE html>
<html lang="en">
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Contact Form</title>
    <h1>Contact Form</h1>
    <form method="post" action="/">
        {{ form.hidden_tag() }}
        {{ form.name.label }} {{ form.name(size=20) }}<br>
        {{ form.email.label }} {{ form.email(size=20) }}<br>
        {{ form.submit() }}

Handling Form Submissions

Great! Now, when users drop their suggestions, we need to grab those and do something with them.

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

    if form.validate_on_submit():
        name = form.name.data
        email = form.email.data

        # Process the data (e.g., store in a database)
        # For now, let's print the data
        print(f'Name: {name}, Email: {email}')

    return render_template('home.html', form=form)

This modification ensures that when the form is submitted, the data is processed. In a real-world scenario, you would typically store this data in a database.

Flask-WTF for Form Validation

Forms are cool, but what if someone forgets to put their name in the suggestion box? Flask-WTF has us covered.

Step 1: Install Flask-WTF

Before we dive into validation, install Flask-WTF:

pip install Flask-WTF

Step 2: Secret Key Configuration

Now, tell Flask to protect our forms. Add this to app.py:

from flask_wtf.csrf import CSRFProtect

app = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key'  # Change this to a secure key
csrf = CSRFProtect(app)

Form Validation and CSRF Protection

Imagine Flask-WTF as our magic guard checking every suggestion that goes into the box.

Form Validation

In our suggestion box (form), we can now set rules. For instance, if someone forgets to leave their name, Flask-WTF will gently remind them.

from wtforms import StringField, SubmitField, validators

class ContactForm(FlaskForm):
    name = StringField('Name', validators=[validators.InputRequired()])
    email = StringField('Email', validators=[validators.Email()])
    submit = SubmitField('Submit')

CSRF Protection

Remember the magic guard? Now, it not only checks suggestions but also makes sure they’re coming from real users, not sneaky bots.

In the home.html template, make sure to include the hidden CSRF token:

<form method="post" action="/">
    {{ form.hidden_tag() }}
    {{ form.name.label }} {{ form.name(size=20) }}<br>
    {{ form.email.label }} {{ form.email(size=20) }}<br>
    {{ form.submit() }}

Building Dynamic Forms

Let’s take our suggestion box to the next level. What if we want different boxes for regular users and administrators?

class RegistrationForm(FlaskForm):
    username = StringField('Username', validators=[validators.InputRequired()])
    password = PasswordField('Password', validators=[validators.InputRequired()])
    role = SelectField('Role', choices=[('user', 'User'), ('admin', 'Administrator')])
    submit = SubmitField('Register')

In this form, the role field is a dropdown menu asking, “Are you a regular user or an admin?” You can customize the choices based on your application’s needs.


In the vast world of web development, Flask Forms stand as friendly gatekeepers, allowing websites and users to communicate seamlessly. From simple suggestion boxes to dynamic registration forms, Flask Forms offer a versatile solution. Remember, the real magic happens when you test and refine your forms regularly.

Now that you’ve dipped your toes into the

Flask Forms magic, why not explore more? Visit these links for in-depth insights:

  1. Flask Documentation
  2. WTForms Documentation
  3. Flask-WTF Documentation

Frequently Asked Questions (FAQ)

Q1: How can I handle file uploads in Flask Forms?

A1: To handle file uploads, use the FileField provided by WTForms. Check out the WTForms documentation on File Uploads for detailed guidance.

Q2: Can I customize the appearance of my forms?

A2: Absolutely! You can style your forms using CSS. Check out the MDN Web Docs on Styling Forms for tips and tricks.

This journey through Flask Forms is just the beginning. Happy coding!

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *