Flaskのライブラリflask-wtfの使い方|簡単にフォームを作成するよ

スポンサーリンク

このチュートリアルにようこそ! 今日は Flask Web フレームワークのフォームライブラリである Flask WT Forms を見ていきましょう。

スポンサーリンク

Flask WT Forms の必要性

HTML フォームを使うのは良いのですが、いくつかの欠点があります。

  • クライアントサイドの HTML フォームとサーバーサイドの Flask アプリケーションの間に直接的なリンクがない。つまり、フォームのデータはリクエストオブジェクトと一緒にクライアントサイド(ユーザー)からサーバーサイドに送信されます。そのため、Flask Viewはフォームの要素を再作成して処理しなければなりません。
  • HTMLフォームは、リアルタイムで動的にレンダリングするのが難しいです。
  • HTML フォームでは、ユーザの入力を検証する方法がありません。

そのため、アプリケーションコードには Flask WT Forms を使うのが望ましいです。

フラスコWTフォームの構築

それを理解する最良の方法は、自分たちでやってみることです。

このセクションでは、まさにそれを行います。

では、シートベルトを締めて、始めましょう。

1. WT Forms をシステムにインストールする

WT Forms を使用するためには、まずインストールする必要があります。

ここでは、PIP を使ってインストールします。

ターミナルで次のコマンドを実行します。

pip install flask-wtf

これで使用する準備が整いました。

2. Forms.pyファイルでの単純なWTフォームのコード化

WTフォームは、別の “forms.py “ファイル内に存在する必要があります。

したがって、メインのFlaskファイルの横に新しいforms.pyファイルを作成します。

from flask_wtf import Form
from wtforms import Field1, Field2, Field3 ......, SubmitField
 
class FormName(Form):
   Fied1_name = Field1("Display_name")
   Fied2_name = Field2("Display_name")
   Fied3_name = Field3("Display_name")
 
   submit = SubmitField("Submit")

WTフォームのシンタックスは、以下のようになります。

from flask_wtf import Form
from wtforms import TextField, IntegerField, SubmitField
from wtforms import validators, ValidationError
 
class StudentForm(Form):
   name = TextField("Student Name", [validators.Required("Please enter your name")])
   marks = IntegerField("Marks", [validators.Required("Please enter your marks")])
   email = TextField("Email",[validators.Required("Please enter your email"),validators.Email("Invalid email address")])
    
   submit = SubmitField("Submit")

ここで、フォームクラス内のフィールドは次のようになります。

| フォームフィールド
| — | — |
| TextField|これは HTML フォーム属性の入力タイプ – テキストに類似しています|BooleanField|これは HTML フォーム属性の入力タイプ – テキストに類似しています。

| BooleanField|これは、HTMLフォーム属性の入力タイプ-チェックボックスに類似しています|BooleanField|これは、HTMLフォーム属性の入力タイプ-チェックボックスに類似しています。

| DecimalField|小数点以下の数字を表示するためのTextFieldです。

| IntegerField|整数値を表示するTextFieldです。

| RadioField|ラジオボタンHTMLフォーム要素を表します。

| SelectField|セレクトフォームエレメントを示します。

| TextAreaField|HTMLフォーム属性の入力タイプ-テキストエリアと類似しています。

| PasswordField|ユーザーからフォーム入力としてパスワードを受け取ります。

|
| SubmitField|HTMLフォーム属性のInputタイプ-Submitに類似しています。

フォームフィールド フォームフィールドにバリデータを追加することもできます。

それでは、forms.py にシンプルな学生フォームを記述してみましょう。

pip install email_validator

ここで、email_validatorがインストールされていない場合、エラーが発生する可能性があります。

これを修正するには、email_validatorをインストールします。

from flask import Flask,render_template, request
from forms import StudentForm
 
app = Flask(__name__)
app.secret_key = 'form_csrf_token_security_key'
 
@app.route('/form', methods = ['POST', 'GET'])
def FormView():
    form = StudentForm()
 
    if request.method =='POST':
        form = StudentForm()
        if form.validate()== True:
            return "Process Successful"
        return render_template('form.html', form = form)
     
    return render_template('form.html', form = form)
             
 
app.run(host='localhost', port=5000)

以上で動作するようになりました。

3. Flask のメインファイルをコーディングする

では、Form をメインファイルにインクルードしていきます。

以下のコードを考えてみましょう。

<form action = "http://localhost:5000/endpoint" method = post>
{{ form.hidden_tag() }}
         {{ form.field_name1.label }}<br>
         {{ form.field_name1 }}
         <br>
 
         {{ form.field_name2.label }}<br>
         {{ form.field_name2 }}
         <br>
 
         {{ form.field_name3.label }}<br>
         {{ form.field_name3 }}
         <br>
 
         {{ form.submit }}
</form>

ここで

  • フォームをクラスオブジェクトとして呼び出します。ユーザが初めてサイトを開いたとき(GETメソッド)、StudentForm()は空っぽの状態です。したがって、空のフォームを取得することになります。
  • ユーザがフォームを送信すると(POSTメソッド)、StudentForm()クラスオブジェクトにユーザデータが格納されます。データが有効であれば、”処理成功” を返します。

これが、ここで使用しているコードロジックです。

秘密鍵は、HTML フォーム・テンプレートの CSRF セキュリティ・トークンを解除するために必要です。

4. フォームのテンプレートの作成

さて、フォームをユーザーに表示するには、HTML テンプレートファイルにインクルードする必要があります。

WT FormをHTMLにインクルードするための構文は次のとおりです。

<form action = "http://localhost:5000/form" method = post>
{{ form.hidden_tag()}}
         {{ form.name.label }}<br>
         {{ form.name }}
         <br>
 
         {{ form.marks.label }}<br>
         {{ form.marks }}
         <br>
 
         {{ form.email.label }}<br>
         {{ form.email }}
         <br>
 
         {{ form.submit }}
</form>

ここで

  • {{ form.hidden_tag() }} は CSRF トークンの隠しフィールドで、Flask アプリケーションのメインファイルに記述されたセキュリティキーを受け取ります。
  • {{ form.field.Label }} はフィールド名です。
  • {{ form.field }} はフィールドの入力ボックスです。

したがって、StudentFormのTemplateファイル “form.html “は以下のようになります。

python filename.py

テンプレートについてもっと知りたい方は Flask templates の記事を参照してください。

5. Flaskアプリケーションを実装する

コーディング編はここまでです! では、サーバーを立ち上げてみましょう

File Location
File Location

“/form “にアクセスします。

Flask WT Forms
WT Form

詳細を入力し、送信をクリックします。

Success Page
Success Page

ナイス!

まとめ

以上、フラスコWTフォームについてでした。

以上、Flask WT フォームについてでした。

Flask HTML フォームについてもっと知りたい方は Flask Forms の記事をご覧ください。

Flask WT Forms についてもっと詳しく知りたい方は、こちらのドキュメントをご覧ください。

それでは、また次の記事でお会いしましょう。

タイトルとURLをコピーしました