Bird
Raised Fist0
Flaskframework~5 mins

Form field types in Flask

Choose your learning style10 modes available
Introduction

Form field types help you collect different kinds of information from users in a web form.

When you want users to enter text like their name or email.
When you need users to pick a date or time.
When you want users to select options from a list.
When you want users to upload files.
When you want users to enter numbers or passwords.
Syntax
Flask
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, BooleanField, SubmitField, SelectField, DateField, FileField
from wtforms.validators import DataRequired, Email
Each field type corresponds to a kind of input in the HTML form.
Validators help check if the user input is correct or complete.
Examples
This form collects a username, password, and a checkbox for remembering the user.
Flask
class LoginForm(FlaskForm):
    username = StringField('Username', validators=[DataRequired()])
    password = PasswordField('Password', validators=[DataRequired()])
    remember_me = BooleanField('Remember Me')
    submit = SubmitField('Sign In')
This form collects an email, a date, and a choice from a dropdown menu.
Flask
class RegistrationForm(FlaskForm):
    email = StringField('Email', validators=[DataRequired(), Email()])
    birth_date = DateField('Birth Date', format='%Y-%m-%d')
    gender = SelectField('Gender', choices=[('M', 'Male'), ('F', 'Female')])
    submit = SubmitField('Register')
This form lets users upload a file.
Flask
class UploadForm(FlaskForm):
    file = FileField('Upload File', validators=[DataRequired()])
    submit = SubmitField('Upload')
Sample Program

This Flask app shows a login form with username, password, and a remember me checkbox. When submitted, it greets the user and shows if they want to be remembered.

Flask
from flask import Flask, render_template_string, request
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, BooleanField, SubmitField
from wtforms.validators import DataRequired

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret-key'

class LoginForm(FlaskForm):
    username = StringField('Username', validators=[DataRequired()])
    password = PasswordField('Password', validators=[DataRequired()])
    remember_me = BooleanField('Remember Me')
    submit = SubmitField('Sign In')

@app.route('/', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    message = ''
    if form.validate_on_submit():
        message = f"Hello, {form.username.data}! Remember me: {form.remember_me.data}"
    return render_template_string('''
        <form method="POST">
            {{ form.hidden_tag() }}
            <p>{{ form.username.label }} {{ form.username() }}</p>
            <p>{{ form.password.label }} {{ form.password() }}</p>
            <p>{{ form.remember_me() }} {{ form.remember_me.label }}</p>
            <p>{{ form.submit() }}</p>
        </form>
        <p>{{ message }}</p>
    ''', form=form, message=message)

if __name__ == '__main__':
    app.run(debug=True)
OutputSuccess
Important Notes

Always set a secret key in Flask to protect your forms from attacks.

Use validators to make sure users fill in required fields correctly.

Each field type creates a matching HTML input type automatically.

Summary

Form field types let you collect different kinds of user input easily.

Use StringField for text, PasswordField for passwords, BooleanField for checkboxes, SelectField for dropdowns, DateField for dates, and FileField for uploads.

Validators help keep user input safe and correct.

Practice

(1/5)
1. Which Flask-WTF form field type should you use to collect a user's password securely?
easy
A. StringField
B. PasswordField
C. BooleanField
D. SelectField

Solution

  1. Step 1: Understand the purpose of each field type

    PasswordField is designed to mask input for passwords, unlike StringField which is plain text.
  2. Step 2: Match the field to the requirement

    Since passwords need to be hidden when typed, PasswordField is the correct choice.
  3. Final Answer:

    PasswordField -> Option B
  4. Quick Check:

    Password input uses PasswordField [OK]
Hint: Use PasswordField for hidden password input [OK]
Common Mistakes:
  • Using StringField for passwords exposes text
  • Choosing BooleanField or SelectField for password input
  • Confusing PasswordField with FileField
2. Which of the following is the correct way to declare a checkbox field in a Flask-WTF form?
easy
A. checkbox = BooleanField('Accept Terms')
B. checkbox = StringField('Accept Terms')
C. checkbox = PasswordField('Accept Terms')
D. checkbox = SelectField('Accept Terms')

Solution

  1. Step 1: Identify the field type for checkboxes

    BooleanField is used for true/false inputs like checkboxes.
  2. Step 2: Verify the syntax

    BooleanField('Accept Terms') correctly declares a checkbox with label 'Accept Terms'.
  3. Final Answer:

    checkbox = BooleanField('Accept Terms') -> Option A
  4. Quick Check:

    Checkbox uses BooleanField [OK]
Hint: Checkboxes use BooleanField in Flask-WTF [OK]
Common Mistakes:
  • Using StringField for checkboxes
  • Confusing SelectField with BooleanField
  • Incorrect field initialization syntax
3. Given this Flask-WTF form snippet:
class MyForm(FlaskForm):
    color = SelectField('Favorite Color', choices=[('r', 'Red'), ('g', 'Green'), ('b', 'Blue')])

form = MyForm()
print(form.color.data)

What will be printed if the user selects 'Green' and submits the form?
medium
A. 'Green'
B. None
C. 'g'
D. 'color'

Solution

  1. Step 1: Understand SelectField choices format

    Choices are tuples where first value is the actual data, second is the label shown.
  2. Step 2: Identify the data returned on selection

    Selecting 'Green' returns the first element of the tuple: 'g'.
  3. Final Answer:

    'g' -> Option C
  4. Quick Check:

    SelectField returns choice key, not label [OK]
Hint: SelectField returns the choice key, not the label [OK]
Common Mistakes:
  • Assuming the label is returned instead of the key
  • Confusing field name with data
  • Expecting None if form not submitted
4. What is wrong with this Flask-WTF form field declaration?
class UploadForm(FlaskForm):
    file = FileField('Upload File', validators=[DataRequired()])
medium
A. FileField cannot have validators
B. Label 'Upload File' is not allowed
C. FileField should be StringField
D. Missing import for DataRequired validator

Solution

  1. Step 1: Check validator usage

    DataRequired is a validator that must be imported from wtforms.validators.
  2. Step 2: Identify missing import

    If DataRequired is not imported, this code will raise a NameError.
  3. Final Answer:

    Missing import for DataRequired validator -> Option D
  4. Quick Check:

    Validators need proper imports [OK]
Hint: Always import validators before using them [OK]
Common Mistakes:
  • Assuming FileField can't have validators
  • Using wrong field type for file uploads
  • Ignoring import errors
5. You want to create a Flask-WTF form that asks for a user's birthdate and a yes/no confirmation if they agree to terms. Which combination of field types is correct?
hard
A. DateField for birthdate and BooleanField for agreement
B. StringField for birthdate and SelectField for agreement
C. PasswordField for birthdate and BooleanField for agreement
D. FileField for birthdate and StringField for agreement

Solution

  1. Step 1: Choose appropriate field for date input

    DateField is designed to handle date inputs like birthdate.
  2. Step 2: Choose field for yes/no confirmation

    BooleanField is perfect for true/false inputs like agreement checkboxes.
  3. Final Answer:

    DateField for birthdate and BooleanField for agreement -> Option A
  4. Quick Check:

    DateField + BooleanField = correct combo [OK]
Hint: Use DateField for dates and BooleanField for yes/no [OK]
Common Mistakes:
  • Using StringField for dates causes format issues
  • Using PasswordField for non-password inputs
  • Confusing FileField with date or boolean inputs
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