カテゴリ: Flask 更新日: 2026/02/06

Flask-WTFの使い方!フォームバリデーションを簡単にする拡張機能の導入手順

Flask-WTFの使い方!フォームバリデーションを簡単にする拡張機能の導入手順
Flask-WTFの使い方!フォームバリデーションを簡単にする拡張機能の導入手順

先生と生徒の会話形式で理解しよう

生徒

「Flaskで入力フォームを作ったら、空欄だったり間違った入力をチェックするのが大変そう…簡単にできる方法ってありますか?」

先生

「そのとおり。Flaskでは『Flask-WTF』という拡張機能を使うと、入力チェック(バリデーション)をとても簡単に行えるようになります。」

生徒

「Flask-WTFって、難しそうな名前ですね…。どうやって使うんですか?」

先生

「大丈夫ですよ。Flask-WTFを使えば、Pythonのコードだけでわかりやすくフォームを定義して、バリデーションも自動でやってくれるんです。ひとつずつ順番に説明していきましょう!」

1. Flask-WTFとは?

1. Flask-WTFとは?
1. Flask-WTFとは?

Flask-WTF(フラスク・ダブルティーエフ)は、PythonのWebフレームワークFlask(フラスク)でフォームを扱いやすくするための拡張機能(エクステンション)です。フォームの作成だけでなく、入力チェック(バリデーション)やエラー表示までをまとめて手伝ってくれる、便利な追加パーツだと思ってください。

Webアプリでは、名前やメールアドレス、問い合わせ内容などを入力してもらう「フォーム」がよく使われます。ところが、フォームには「必須項目が空欄のまま送信されてしまう」「メールアドレスの書き方が間違っている」といった問題がつきものです。こうした間違った入力を防ぐチェックのことをバリデーションと呼び、実はかなり重要な役割を持っています。

Flask-WTFを使うと、HTMLで一からフォームを組み立てなくても、Pythonのコードの中でフォームの項目とルールをまとめて定義できます。フォームの「設計図」をPythonで書いておくと、その設計図をもとにフォームが表示され、入力チェックも自動で行ってくれます。

たとえば、「名前を必ず入力してもらいたい」という、とてもシンプルなフォームのイメージは次のようになります。


from flask_wtf import FlaskForm
from wtforms import StringField
from wtforms.validators import DataRequired

class SimpleNameForm(FlaskForm):
    name = StringField('お名前', validators=[DataRequired()])

このサンプルでは、まずFlaskFormという「フォームの元になるクラス」を読み込み、StringFieldという文字入力用の部品、そしてDataRequiredという「空欄禁止」のルールを読み込んでいます。

SimpleNameFormクラスの中でnameという項目をひとつ定義し、「ラベルは『お名前』」「必ず何か入力されていないとエラーにする」というルールをセットしています。プログラミング未経験の方は、「フォームの項目とチェックの条件を、Pythonで宣言しておくもの」くらいのイメージを持っておけば大丈夫です。

実際には、このフォームクラスをFlaskのルートやテンプレートと組み合わせて使いますが、その具体的な書き方は次の章以降で順番に見ていきます。まずは「Flask-WTFは、Flaskでフォームを作りやすくし、入力チェックもまとめて任せられる便利な拡張機能なんだ」と理解しておきましょう。

2. Flask-WTFをインストールしよう

2. Flask-WTFをインストールしよう
2. Flask-WTFをインストールしよう

Flask-WTFを使うには、まずパソコンに「Flask-WTF」というライブラリをインストールする必要があります。難しい作業ではなく、Pythonでよく使われる「pip(ピップ)」というインストール用の道具を使ってコマンドを1行実行するだけです。

Windowsなら「コマンドプロンプト」や「PowerShell」、MacやLinuxなら「ターミナル」を開き、次のコマンドを入力して実行してみてください。


pip install flask-wtf

このコマンドは、「pipを使って、flask-wtfという名前のライブラリをインストールしてください」という意味になります。インターネットから必要なファイルをダウンロードして、Pythonから使えるようにしてくれます。

もし、複数のPythonが入っている環境でうまく動かない場合は、次のようにpython -m pipを使う方法もあります。


python -m pip install flask-wtf

インストールが成功すると、Flaskのコードの中でfrom flask_wtf import FlaskFormのように書いてFlask-WTFを読み込めるようになります。プログラミング未経験の方は、「まずこのコマンドを1回実行しておけば、Flaskからフォーム用の機能が使えるようになる」と覚えておけば十分です。

ここまでで、Flask-WTFを使うための準備の第一歩が完了しました。次の章では、インストールしたFlask-WTFを使う前提となる、Flaskアプリ本体の基本的な準備を見ていきましょう。

3. Flaskアプリの準備

3. Flaskアプリの準備
3. Flaskアプリの準備

フォームを使うには、まずFlaskアプリの基本的な構造が必要です。以下は簡単なFlaskアプリのコードです。


from flask import Flask, render_template, request
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired

app = Flask(__name__)
app.secret_key = 'ひみつのキー'

secret_key(シークレットキー)は、セキュリティ上の理由で必要です。フォームの送信に使われる情報を守るための鍵のようなものです。

4. フォームを定義しよう

4. フォームを定義しよう
4. フォームを定義しよう

Flask-WTFでは、Pythonのクラスを使ってフォームを定義します。次のように書きます。


class NameForm(FlaskForm):
    name = StringField('お名前', validators=[DataRequired()])
    submit = SubmitField('送信')

StringField(ストリングフィールド)は文字列用の入力欄です。DataRequired()(データリクワイヤード)は「必ず入力してください」という意味のバリデーションです。

5. ルーティングとビュー関数を作ろう

5. ルーティングとビュー関数を作ろう
5. ルーティングとビュー関数を作ろう

次に、フォームを表示して、入力を受け取る処理をFlaskの関数で書きます。


@app.route('/', methods=['GET', 'POST'])
def index():
    form = NameForm()
    if form.validate_on_submit():
        return f"こんにちは、{form.name.data}さん!"
    return render_template('index.html', form=form)

validate_on_submit()は、フォームが正しく送信されたかどうかを確認する命令です。

6. HTMLテンプレートを作ろう

6. HTMLテンプレートを作ろう
6. HTMLテンプレートを作ろう

フォームの見た目を表示するためのHTMLファイルを作ります。Flaskではテンプレートという仕組みを使って、HTMLとPythonを組み合わせます。以下はtemplates/index.htmlの内容です。


<!doctype html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>お名前フォーム</title>
</head>
<body>
    <form method="post">
        {{ form.hidden_tag() }}
        <p>
            {{ form.name.label }}<br>
            {{ form.name(size=32) }}
        </p>
        <p>{{ form.submit() }}</p>
    </form>
</body>
</html>

form.hidden_tag()は、セキュリティ用の情報を自動で挿入してくれるタグです。

7. 入力チェックを試してみよう

7. 入力チェックを試してみよう
7. 入力チェックを試してみよう

ブラウザでページを開き、名前を入力せずに「送信」ボタンを押してみてください。エラーメッセージは表示されませんが、フォームは送信されず、入力が必要なことがわかります。

このように、Flask-WTFを使うとフォームのチェックが自動で行われ、Pythonだけで安全で簡単な入力フォームを作ることができます。

8. よく使うバリデーション

8. よく使うバリデーション
8. よく使うバリデーション

Flask-WTFでは、他にも色々なバリデーションが使えます。よく使うものを紹介します。

  • DataRequired():空欄を禁止
  • Email():正しいメールアドレス形式か確認
  • Length(min=4, max=20):文字数の範囲を指定

例えばメールアドレスの入力欄を作るなら、次のように書きます。


from wtforms import StringField
from wtforms.validators import Email

email = StringField('メールアドレス', validators=[DataRequired(), Email()])

9. なぜFlask-WTFを使うべきなの?

9. なぜFlask-WTFを使うべきなの?
9. なぜFlask-WTFを使うべきなの?

HTMLでフォームを書く方法もありますが、それでは入力チェックを自分でJavaScriptやPythonで書かなければなりません。

Flask-WTFを使えば、フォームの定義・表示・バリデーションのすべてをPythonだけでスッキリ書けます。コードの見通しも良くなり、セキュリティも高まります。

まとめ

まとめ
まとめ

Flaskでフォームを作成する際に欠かせない存在となる「Flask-WTF」は、フォームバリデーションを簡単かつ安全に実装するための拡張機能です。この記事では、Flask-WTFのインストール方法から、Pythonコードによるフォーム定義、ルーティング設定、テンプレートとの連携方法までを丁寧に紹介しました。

Flask-WTFを使うことで、HTMLで複雑な入力チェックコードを書くことなく、DataRequiredEmailLengthといったバリデーションをPython内で一元管理できます。特に、`validate_on_submit()`を使えば、送信と同時に自動でバリデーション処理が実行されるので、セキュリティやUX向上にもつながります。

実際にPythonコードとテンプレートを組み合わせて構築することで、動作の流れやフォーム送信の仕組みを視覚的にも理解できたことでしょう。以下に簡単なフォームの例を改めて記述しますので、実際に試してみるとより理解が深まります。

Pythonで定義するフォームクラス


from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired, Email

class ContactForm(FlaskForm):
    name = StringField('お名前', validators=[DataRequired()])
    email = StringField('メールアドレス', validators=[DataRequired(), Email()])
    submit = SubmitField('送信')

HTMLテンプレート(templates/contact.html)


<form method="post">
    {{ form.hidden_tag() }}
    <p>{{ form.name.label }}<br>{{ form.name(size=32) }}</p>
    <p>{{ form.email.label }}<br>{{ form.email(size=32) }}</p>
    <p>{{ form.submit() }}</p>
</form>

このようにFlask-WTFを活用すれば、フォーム入力の精度と開発効率を高めることが可能です。
バリデーションルールもカスタマイズ可能なので、ユーザー登録やお問い合わせフォームなど、様々な用途に応用できます。

先生と生徒の振り返り会話

生徒

「Flask-WTFって最初は難しそうに感じたけど、Pythonだけでフォームが作れて、しかも自動で入力チェックもしてくれるのはすごく便利ですね!」

先生

「そうですね。Flask-WTFを使えば、開発のスピードも上がるし、セキュリティ面でも安心できます。フォーム処理に関するベストプラクティスといえますよ。」

生徒

「Emailのチェックや文字数の制限も簡単にできるし、テンプレートと組み合わせればすぐにWebアプリが作れそうです!」

先生

「その意気です。今回学んだFlask-WTFは、実践的なフォーム開発の第一歩として最適ですから、いろんな場面でどんどん使ってみてくださいね。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Flask-WTFって何のために使うの?Flaskのフォーム作成とバリデーションの違いは?

Flask-WTFは、PythonのFlaskでフォームを作成する際に、簡単にバリデーション(入力チェック)機能を追加できる拡張機能です。Flask単体でもフォームは作れますが、入力チェックを自分で実装しなければなりません。Flask-WTFを使えば、フォームの定義から入力の検証までをPythonコードだけで効率的に行えます。

Flask-WTFのインストール方法は?pipの使い方も知りたい

Flask-WTFは、Pythonのパッケージ管理ツール「pip」を使ってインストールします。コマンドプロンプトやターミナルにpip install flask-wtfと入力することで、Flask-WTFをプロジェクトに導入できます。
カテゴリの一覧へ
新着記事
New1
Flask
認証と認可の違いを整理しよう!Flaskで押さえるべき基礎概念
New2
Flask
Flaskで非同期フォーム送信(Ajax POST)を実装する方法を解説!初心者でもわかるステップ解説
New3
Python
Pythonで定数を定義する方法!変更されない変数の書き方と命名ルールを初心者向けに解説
New4
Python
PythonでMySQLに接続する方法!pymysqlの基本的な使い方
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonとは何か?初心者向けにできること・特徴・インストール手順までやさしく解説
No.2
Java&Spring記事人気No2
Flask
Flaskでデータベースを使う基本!SQLAlchemyの導入方法をやさしく解説
No.3
Java&Spring記事人気No3
Python
Pythonでリストの要素を検索・取得する方法!index()やin演算子の活用法
No.4
Java&Spring記事人気No4
Python
Pythonのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.5
Java&Spring記事人気No5
Python
Pythonで仮想環境(venv)を作る方法!初心者向けに環境構築をステップ解説
No.6
Java&Spring記事人気No6
Python
Pythonプログラムの書き方を基礎から学ぼう!初心者が覚えるべき文法とは?
No.7
Java&Spring記事人気No7
Flask
Flaskアプリの環境変数をクラウドで安全に設定する方法!初心者のための完全ガイド
No.8
Java&Spring記事人気No8
Python
PythonでHello Worldを表示するには?初心者向けに最初の1行を実行してみよう