Skip to content

Creating Form Classes

A Flask-WTF form class defines:

  • fields
  • validators
  • default values

Example: Contact form

from flask_wtf import FlaskForm
from wtforms import StringField, EmailField, SubmitField
from wtforms.validators import DataRequired, Email, Length
 
 
class ContactForm(FlaskForm):
    name = StringField("Name", validators=[DataRequired(), Length(min=2, max=50)])
    email = EmailField("Email", validators=[DataRequired(), Email()])
    submit = SubmitField("Send")
from flask_wtf import FlaskForm
from wtforms import StringField, EmailField, SubmitField
from wtforms.validators import DataRequired, Email, Length
 
 
class ContactForm(FlaskForm):
    name = StringField("Name", validators=[DataRequired(), Length(min=2, max=50)])
    email = EmailField("Email", validators=[DataRequired(), Email()])
    submit = SubmitField("Send")

Using the form in a view

from flask import Flask, render_template, redirect, url_for
 
app = Flask(__name__)
app.config["SECRET_KEY"] = "dev-key"
 
 
@app.route("/contact", methods=["GET", "POST"])
def contact():
    form = ContactForm()
 
    if form.validate_on_submit():
        # Access clean field values:
        name = form.name.data
        email = form.email.data
        # ...save/send email...
        return redirect(url_for("contact_success"))
 
    return render_template("contact.html", form=form)
from flask import Flask, render_template, redirect, url_for
 
app = Flask(__name__)
app.config["SECRET_KEY"] = "dev-key"
 
 
@app.route("/contact", methods=["GET", "POST"])
def contact():
    form = ContactForm()
 
    if form.validate_on_submit():
        # Access clean field values:
        name = form.name.data
        email = form.email.data
        # ...save/send email...
        return redirect(url_for("contact_success"))
 
    return render_template("contact.html", form=form)

Why validate_on_submit()?

It’s shorthand for:

  • request is POST
  • AND form validates

This keeps your route clean.

If this helped you, consider buying me a coffee β˜•

Buy me a coffee

Was this page helpful?

Let us know how we did