Validation rules help check if the data users send to your app is correct and safe. They stop mistakes and bad data from causing problems.
Validation rules in Flask
from flask_wtf import FlaskForm from wtforms import StringField, IntegerField from wtforms.validators import DataRequired, Email, NumberRange class MyForm(FlaskForm): name = StringField('Name', validators=[DataRequired()]) email = StringField('Email', validators=[DataRequired(), Email()]) age = IntegerField('Age', validators=[DataRequired(), NumberRange(min=18, max=99)])
Validators are added as a list to each form field.
Common validators include DataRequired(), Email(), and NumberRange().
from wtforms.validators import DataRequired name = StringField('Name', validators=[DataRequired()])
from wtforms.validators import Email email = StringField('Email', validators=[Email()])
from wtforms.validators import NumberRange age = IntegerField('Age', validators=[NumberRange(min=18, max=99)])
This Flask app shows a form with name, email, and age fields. It uses validation rules to check the inputs. If the data is correct, it shows a success message. If not, it shows errors next to each field.
from flask import Flask, render_template_string, request from flask_wtf import FlaskForm from wtforms import StringField, IntegerField from wtforms.validators import DataRequired, Email, NumberRange app = Flask(__name__) app.config['SECRET_KEY'] = 'secret-key' class UserForm(FlaskForm): name = StringField('Name', validators=[DataRequired()]) email = StringField('Email', validators=[DataRequired(), Email()]) age = IntegerField('Age', validators=[DataRequired(), NumberRange(min=18, max=99)]) form_template = ''' <form method="POST"> {{ form.hidden_tag() }} <p> {{ form.name.label }}<br> {{ form.name(size=20) }}<br> {% for error in form.name.errors %}<span style="color:red;">{{ error }}</span><br>{% endfor %} </p> <p> {{ form.email.label }}<br> {{ form.email(size=20) }}<br> {% for error in form.email.errors %}<span style="color:red;">{{ error }}</span><br>{% endfor %} </p> <p> {{ form.age.label }}<br> {{ form.age() }}<br> {% for error in form.age.errors %}<span style="color:red;">{{ error }}</span><br>{% endfor %} </p> <p><input type="submit" value="Submit"></p> </form> {% if success %}<p style="color:green;">Form submitted successfully!</p>{% endif %} ''' @app.route('/', methods=['GET', 'POST']) def index(): form = UserForm() success = False if form.validate_on_submit(): success = True return render_template_string(form_template, form=form, success=success) if __name__ == '__main__': app.run(debug=True)
Always set a secret key in Flask to use Flask-WTF forms securely.
Validation errors appear automatically if you check form.errors or use form.validate_on_submit().
You can create custom validators if needed for special rules.
Validation rules check user input to keep data correct and safe.
Flask-WTF and WTForms make adding validation easy with simple validators.
Show helpful error messages so users can fix their input.
Practice
Solution
Step 1: Understand validation rules
Validation rules are used to check if user input is correct and safe before processing.Step 2: Identify the main purpose in Flask
In Flask, validation ensures data is valid and prevents errors or security issues.Final Answer:
To check user input and ensure it meets expected criteria -> Option CQuick Check:
Validation = Check input correctness [OK]
- Confusing validation with styling or database storage
- Thinking validation speeds up server response
- Ignoring the role of validation in input safety
Solution
Step 1: Identify the correct module for validators
WTForms validators are imported from the wtforms.validators module.Step 2: Check the import syntax
The correct syntax is 'from wtforms.validators import DataRequired'.Final Answer:
from wtforms.validators import DataRequired -> Option DQuick Check:
Validator import = from wtforms.validators [OK]
- Importing from flask or flask_wtf incorrectly
- Using wrong import syntax
- Confusing fields with validators
class MyForm(FlaskForm):
name = StringField('Name', validators=[DataRequired()])
age = IntegerField('Age', validators=[NumberRange(min=18, max=99)])
What happens if a user submits the form with an empty name and age 17?
Solution
Step 1: Check the name field validation
Name uses DataRequired(), so empty input causes validation failure.Step 2: Check the age field validation
Age must be between 18 and 99; 17 is below minimum, so validation fails.Final Answer:
Form validation fails with errors for both name and age fields -> Option AQuick Check:
Empty name + age 17 = two validation errors [OK]
- Assuming age 17 passes because it is a number
- Ignoring DataRequired on name
- Thinking only one field can fail
class EmailForm(FlaskForm):
email = StringField('Email', validators=[Email(), DataRequired()])
Why might this code cause a runtime error when validating?
Solution
Step 1: Check imports for validators
If Email validator is not imported from wtforms.validators, it causes NameError at runtime.Step 2: Validate other options
Order of validators does not cause error; multiple validators are allowed; FlaskForm import is correct from flask_wtf.Final Answer:
The Email validator is not imported, causing a NameError -> Option AQuick Check:
Missing import = NameError [OK]
- Thinking validator order matters for errors
- Believing multiple validators are disallowed
- Confusing FlaskForm import source
Solution
Step 1: Check username validators
Username needs DataRequired and Length(min=5) to enforce minimum length.Step 2: Check password and confirmation validators
Password field requires DataRequired and EqualTo('confirm') to match confirmation; confirm field is defined without validators.Step 3: Compare options
username = StringField('Username', validators=[DataRequired(), Length(min=5)])
password = PasswordField('Password', validators=[DataRequired(), EqualTo('confirm', message='Passwords must match')])
confirm = PasswordField('Repeat Password') correctly uses Length(min=5) and EqualTo with matching field names and messages.Final Answer:
username = StringField('Username', validators=[DataRequired(), Length(min=5)])
password = PasswordField('Password', validators=[DataRequired(), EqualTo('confirm', message='Passwords must match')])
confirm = PasswordField('Repeat Password') -> Option BQuick Check:
Length(min=5) + EqualTo('confirm') = correct validation [OK]
- Using Length(max=5) instead of min for username
- Placing EqualTo on wrong field
- Missing DataRequired on password
Ready to prove it?
Pass the test and this pattern moves unknown
