Bird
Raised Fist0
Flaskframework~20 mins

Validation rules in Flask - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Flask Validation Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ component_behavior
intermediate
2:00remaining
What happens when a Flask-WTF form fails validation?
Consider a Flask-WTF form with a required field. What is the behavior when the form is submitted with that field empty?
Flask
from flask_wtf import FlaskForm
from wtforms import StringField
from wtforms.validators import DataRequired

class MyForm(FlaskForm):
    name = StringField('Name', validators=[DataRequired()])

# In the route handler:
form = MyForm()
if form.validate_on_submit():
    result = 'Valid'
else:
    result = 'Invalid'
AThe form.validate_on_submit() returns True, and the form errors list is empty.
BThe form.validate_on_submit() returns True, but the 'name' field is set to None.
CThe form.validate_on_submit() raises a ValidationError exception automatically.
DThe form.validate_on_submit() returns False, and the form errors contain a message about the missing 'name' field.
Attempts:
2 left
💡 Hint
Think about what happens when a required field is empty in a form validation.
📝 Syntax
intermediate
1:30remaining
Which validator syntax is correct for checking an email field in Flask-WTF?
You want to validate that a form field contains a valid email address. Which of the following validator lists is correct?
Flask
from flask_wtf import FlaskForm
from wtforms import StringField
from wtforms.validators import DataRequired, Email

class EmailForm(FlaskForm):
    email = StringField('Email', validators=___)
A[DataRequired(), Email()]
B[DataRequired, Email]
C[DataRequired, Email()]
D[DataRequired(), Email]
Attempts:
2 left
💡 Hint
Validators must be called as functions to create instances.
❓ state_output
advanced
2:00remaining
What is the value of form.errors after submitting invalid data?
Given this Flask-WTF form and submission with empty 'username' and 'password' fields, what does form.errors contain?
Flask
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField
from wtforms.validators import DataRequired

class LoginForm(FlaskForm):
    username = StringField('Username', validators=[DataRequired()])
    password = PasswordField('Password', validators=[DataRequired()])

form = LoginForm(data={'username': '', 'password': ''})
form.validate()
errors = form.errors
ANone
B{'username': ['This field is required.'], 'password': ['This field is required.']}
C{}
D{'username': ['Invalid username.'], 'password': ['Invalid password.']}
Attempts:
2 left
💡 Hint
DataRequired validator adds a specific error message when the field is empty.
🔧 Debug
advanced
2:30remaining
Why does this Flask-WTF form always validate even with empty input?
Examine the code below. Why does form.validate_on_submit() always return True even if the 'email' field is empty?
Flask
from flask_wtf import FlaskForm
from wtforms import StringField
from wtforms.validators import Email

class EmailForm(FlaskForm):
    email = StringField('Email', validators=[Email()])

form = EmailForm(data={'email': ''})
valid = form.validate()
ABecause Email() validator allows empty strings; it only checks format if data is present.
BBecause the Email() validator is missing parentheses and is not called.
CBecause FlaskForm requires DataRequired() validator to run validation.
DBecause the form data is passed incorrectly and validation is skipped.
Attempts:
2 left
💡 Hint
Think about what Email() validator does with empty input.
🧠 Conceptual
expert
3:00remaining
How to combine multiple validators to enforce a required email field with length limits?
You want a Flask-WTF form field that requires an email, checks it is valid, and limits length between 6 and 50 characters. Which validator list achieves this?
Flask
from flask_wtf import FlaskForm
from wtforms import StringField
from wtforms.validators import DataRequired, Email, Length

class ContactForm(FlaskForm):
    email = StringField('Email', validators=___)
A[Email(), Length(min=6, max=50)]
B[DataRequired(), Length(min=6, max=50)]
C[DataRequired(), Email(), Length(min=6, max=50)]
D[DataRequired(), Email(min=6, max=50)]
Attempts:
2 left
💡 Hint
Each validator has a specific role; combine them to cover all requirements.

Practice

(1/5)
1. What is the main purpose of validation rules in a Flask web application?
easy
A. To speed up the server response time
B. To style the web page with CSS
C. To check user input and ensure it meets expected criteria
D. To store data permanently in the database

Solution

  1. Step 1: Understand validation rules

    Validation rules are used to check if user input is correct and safe before processing.
  2. Step 2: Identify the main purpose in Flask

    In Flask, validation ensures data is valid and prevents errors or security issues.
  3. Final Answer:

    To check user input and ensure it meets expected criteria -> Option C
  4. Quick Check:

    Validation = Check input correctness [OK]
Hint: Validation means checking user input is correct [OK]
Common Mistakes:
  • Confusing validation with styling or database storage
  • Thinking validation speeds up server response
  • Ignoring the role of validation in input safety
2. Which of the following is the correct way to import the DataRequired validator from WTForms in a Flask app?
easy
A. import DataRequired from wtforms.fields
B. import DataRequired from flask
C. from flask_wtf import DataRequired
D. from wtforms.validators import DataRequired

Solution

  1. Step 1: Identify the correct module for validators

    WTForms validators are imported from the wtforms.validators module.
  2. Step 2: Check the import syntax

    The correct syntax is 'from wtforms.validators import DataRequired'.
  3. Final Answer:

    from wtforms.validators import DataRequired -> Option D
  4. Quick Check:

    Validator import = from wtforms.validators [OK]
Hint: Validators come from wtforms.validators module [OK]
Common Mistakes:
  • Importing from flask or flask_wtf incorrectly
  • Using wrong import syntax
  • Confusing fields with validators
3. Given this Flask-WTF form code snippet:
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?
medium
A. Form validation fails with errors for both name and age fields
B. Form validation passes because age is a number
C. Form validation fails only for the name field
D. Form validation passes with no errors

Solution

  1. Step 1: Check the name field validation

    Name uses DataRequired(), so empty input causes validation failure.
  2. Step 2: Check the age field validation

    Age must be between 18 and 99; 17 is below minimum, so validation fails.
  3. Final Answer:

    Form validation fails with errors for both name and age fields -> Option A
  4. Quick Check:

    Empty name + age 17 = two validation errors [OK]
Hint: Check all validators; both fields fail here [OK]
Common Mistakes:
  • Assuming age 17 passes because it is a number
  • Ignoring DataRequired on name
  • Thinking only one field can fail
4. Consider this Flask-WTF form snippet:
class EmailForm(FlaskForm):
email = StringField('Email', validators=[Email(), DataRequired()])

Why might this code cause a runtime error when validating?
medium
A. The Email validator is not imported, causing a NameError
B. DataRequired must come before Email in the validators list
C. StringField cannot have multiple validators
D. FlaskForm must be imported from flask, not flask_wtf

Solution

  1. Step 1: Check imports for validators

    If Email validator is not imported from wtforms.validators, it causes NameError at runtime.
  2. Step 2: Validate other options

    Order of validators does not cause error; multiple validators are allowed; FlaskForm import is correct from flask_wtf.
  3. Final Answer:

    The Email validator is not imported, causing a NameError -> Option A
  4. Quick Check:

    Missing import = NameError [OK]
Hint: Always import all validators used [OK]
Common Mistakes:
  • Thinking validator order matters for errors
  • Believing multiple validators are disallowed
  • Confusing FlaskForm import source
5. You want to create a Flask-WTF form that requires a username with at least 5 characters and a password that must be confirmed by retyping. Which validator combination correctly enforces these rules?
hard
A. username = StringField('Username', validators=[Length(max=5)])
password = PasswordField('Password', validators=[DataRequired()])
confirm = PasswordField('Confirm Password', validators=[EqualTo('password')])
B. username = StringField('Username', validators=[DataRequired(), Length(min=5)])
password = PasswordField('Password', validators=[DataRequired(), EqualTo('confirm', message='Passwords must match')])
confirm = PasswordField('Repeat Password')
C. username = StringField('Username', validators=[DataRequired(), Length(max=5)])
password = PasswordField('Password', validators=[EqualTo('confirm')])
confirm = PasswordField('Repeat Password', validators=[DataRequired()])
D. username = StringField('Username', validators=[DataRequired(), Length(min=5)])
password = PasswordField('Password')
confirm = PasswordField('Confirm Password', validators=[DataRequired(), EqualTo('confirm')])

Solution

  1. Step 1: Check username validators

    Username needs DataRequired and Length(min=5) to enforce minimum length.
  2. Step 2: Check password and confirmation validators

    Password field requires DataRequired and EqualTo('confirm') to match confirmation; confirm field is defined without validators.
  3. 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.
  4. 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 B
  5. Quick Check:

    Length(min=5) + EqualTo('confirm') = correct validation [OK]
Hint: Use Length(min=5) and EqualTo('confirm') for password confirmation [OK]
Common Mistakes:
  • Using Length(max=5) instead of min for username
  • Placing EqualTo on wrong field
  • Missing DataRequired on password
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard