Flask-WTF は、フォームを使用して Flask フレームワーク アプリケーションを簡素化するために設計された Python パッケージです。 Flask アプリケーションにフォームを簡単に追加するための、シンプルかつ強力なインターフェイスを提供します。 Flask-WTF を使用すると、フォーム データを簡単に検証および処理し、カスタム バリデーターとフィールドをフォームに追加できます。この記事では、Flask-WTF を使用して Flask アプリケーションにフォームを追加する方法を紹介します。
Flask-WTF のインストール
まず、Flask-WTF パッケージをインストールする必要があります。 pip を使用してインストールできます。
pip install Flask-WTF
Flask アプリケーションの作成
フォームの追加を開始する前に、Flask アプリケーションを作成する必要があります。単純な Flask アプリケーションの例を次に示します。
from flask import Flask app = Flask(__name__) @app.route('/') def hello(): return 'Hello, World!'
より複雑なアプリケーションの場合は、さらに多くの構成とセットアップが必要になる場合があります。
フォーム クラスの作成
Flask-WTF はフォーム クラスを使用してフォーム フィールドを記述します。フォーム クラスは、Flask-WTF で提供されるクラス FlaskForm
から派生します。フォーム クラスでは、フォーム フィールド、バリデータ、およびその他のプロパティを定義できます。以下に、いくつかの基本的なフォーム フィールド タイプを示します。
次に、単純なフォーム クラスの例を示します。
from flask_wtf import FlaskForm from wtforms import StringField, SubmitField from wtforms.validators import DataRequired class NameForm(FlaskForm): name = StringField('Name', validators=[DataRequired()]) submit = SubmitField('Submit')
上の例では、フォーム クラス NameForm
に name という名前のファイルが含まれています。
文字列フィールドと submit
という名前の送信ボタン。文字列フィールドは、StringField
タイプと DataRequired
バリデーターを使用して定義されます。 DataRequired
バリデーターは、フィールド値が空でないことを確認します。
フォーム クラスでは、カスタム バリデーターを定義することもできます。たとえば、次のカスタム バリデータは、ユーザーが入力した値が 50 文字未満であることを確認します。
from wtforms import ValidationError class LengthValidator(object): def __init__(self, max_chars): self.max_chars = max_chars def __call__(self, form, field): if len(field.data) > self.max_chars: raise ValidationError('Value must be less than {} characters'.format(self.max_chars)) class NameForm(FlaskForm): name = StringField('Name', validators=[DataRequired(), LengthValidator(50)]) submit = SubmitField('Submit')
上記の例では、バリデータ LengthValidator
が定義されています。バリデーターは最大長パラメータで初期化され、入力フィールドの長さが最大長を超えているかどうかをチェックします。文字列フィールド定義で、LengthValidator
バリデーターをバリデーターのリストに追加して、その属性値が 50 文字未満であることを確認します。
フォーム クラスでは、フィールドのレンダリング時に使用される CSS クラスなど、他のプロパティも定義できます。これらのプロパティを使用して、フォーム フィールドの外観と操作性をカスタマイズできます。
フォームの使用
Flask アプリケーションでフォームを使用するには、view 関数でフォーム インスタンスを作成する必要があります。フォーム インスタンスはフォーム クラスから作成し、テンプレートに渡すことができます。以下はビュー関数の例です。
from flask import render_template from app import app from forms import NameForm @app.route('/', methods=['GET', 'POST']) def index(): form = NameForm() if form.validate_on_submit(): name = form.name.data return render_template('index.html', name=name) return render_template('index.html', form=form)
上記の例では、ビュー関数 index
はフォーム インスタンス form
を作成します。フォームが送信され、検証が成功した場合は、送信されたフォームから名前を取得してテンプレートに渡します。フォームが送信されていない場合、または検証に失敗した場合にフォームを表示します。
テンプレートでは、Flask-WTF が提供するフォーム描画機能を利用してフォームを描画することができます。以下は、Jinja2 テンプレート エンジンとブートストラップ スタイルを使用した簡単なテンプレートの例です。
<!doctype html> <html> <head> <title>Flask-WTF Example</title> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.3/css/bootstrap.min.css"> </head> <body> <div class="container"> <h1>Hello {{ name }}!</h1> <form method="post"> {{ form.csrf_token }} {{ form.name.label }} {{ form.name }} {% for error in form.name.errors %} <span>{{ error }}</span> {% endfor %} {{ form.submit }} </form> </div> </body> </html>
テンプレートでは、form
オブジェクトを使用してフォーム フィールドと送信ボタンをレンダリングします。 csrf_token
フィールドは、クロスサイト リクエスト フォージェリ攻撃を防ぐために使用される非表示フィールドです。
概要
Flask-WTF を使用すると、Flask アプリケーションにフォームを簡単に追加できます。フォーム クラスを使用すると、カスタム フォーム フィールドとバリデータを作成できます。ビュー関数では、フォーム インスタンスを作成し、テンプレート エンジンを使用してフォームをレンダリングできます。 Flask-WTF は、ファイルのアップロード、フォームのネスト、フォームの前処理などの他の機能も提供します。 Flask-WTF の機能を理解すると、Flask アプリケーションでのフォーム処理がよりシンプルかつ効率的になります。
以上がFlask-WTF: Flask アプリケーションにフォームを追加するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。