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 coffeeWas this page helpful?
Let us know how we did
