0
0
Flaskframework~5 mins

Form field types in Flask

Choose your learning style9 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.