概要
FlaskのFlask-WTFを使ってFormを定義・レンダリング・バリデーションする方法
Formの定義
class AnimalForm(FlaskForm):
name = StringField('name', validators=[validators.Required(), validators.length(max=30)])
kind = StringField('kind', validators=[validators.Required(), validators.length(max=10)])
description = TextAreaField('description', validators=[])
ポイント
- FlaskFormを継承して作る
- validatorsには複数のvalidatorを渡すことができる
Formのレンダリング
<form method="POST">
<p>{{ form.name.label }}:{{ form.name(size=30) }}</p>
<p>{{ form.kind.label }}:{{ form.kind(size=20) }}</p>
<p>{{ form.description.label }}:{{ form.description(cols="50", rows="20") }}</p>
<button type="submit">Submit</button>
</form>
ポイント
- labelにアクセスすることでformで定義した名前を取得できる
- それぞれのフィールドはcallableになっており、HTMLをレンダリングする
- fieldをレダリングするときに、引数を渡すとHTMLのプロパティに変換してくれる
SubmitされたFormのバリデーション
form = AnimalForm()
if form.validate_on_submit():
name = form.name.data
kind = form.kind.data
description = form.description.data
ポイント
- validate_on_submitでpostかどうかのチェック・データのバリデーションをしてくれる
- dataにアクセスすることで、バリデーション後のデータを取得できる