プログラミング

【Python】Flask-WTFを使ってみよう④

投稿日:2021年1月4日 更新日:

前回は「文字数」の「バリデーション」を設定しました。
今回は「パスワード」の方を設定していきます。

パスワードの設定をしてみよう

前回の記事はこちら。

from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField
from wtforms.validators import InputRequired, Length

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret'

class LoginForm(FlaskForm):
   username = StringField('ユーザー名', validators=[InputRequired(), Length(min=8, max=16, message='8文字以上16文字以下で入力してください')])
   password = PasswordField('パスワード')

@app.route('/form', methods=['GET', 'POST'])
def form():
   form = LoginForm()
   if form.validate_on_submit():
      return '<h1>ユーザー名は {}. パスワードは {}.'.format(form.username.data, form.password.data)
   return render_template('form.html', form=form)

if __name__ == "__main__":
   app.run(debug=True)

前回までのコードはこちら。

「AnyOf」をインポートしよう

「wtforms.validators」から「AnyOf」をインポートしてきます。

from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField


------------------------------------------------------------
from wtforms.validators import InputRequired, Length, AnyOf
------------------------------------------------------------


app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret'

class LoginForm(FlaskForm):
   username = StringField('ユーザー名', validators=[InputRequired(), Length(min=8, max=16, message='8文字以上16文字以下で入力してください')])
   password = PasswordField('パスワード')

@app.route('/form', methods=['GET', 'POST'])
def form():
   form = LoginForm()
   if form.validate_on_submit():
      return '<h1>ユーザー名は {}. パスワードは {}.'.format(form.username.data, form.password.data)
   return render_template('form.html', form=form)



if __name__ == "__main__":
   app.run(debug=True)

「AnyOf」は、指定した値と一致しているかをチェックします。

値を指定しよう

では「AnyOf」で値を設定していきます。

from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField
from wtforms.validators import InputRequired, Length, AnyOf

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret'


------------------------------------------------------------------------------------------------------------------------
class LoginForm(FlaskForm):
   username = StringField('ユーザー名', validators=[InputRequired(), Length(min=8, max=16, message='8文字以上16文字以下で入力してください')])
   password = PasswordField('パスワード', validators=[InputRequired(), AnyOf(values=['password'], message='パスワードが違います')])
------------------------------------------------------------------------------------------------------------------------


@app.route('/form', methods=['GET', 'POST'])
def form():
   form = LoginForm()
   if form.validate_on_submit():
      return '<h1>ユーザー名は {}. パスワードは {}.'.format(form.username.data, form.password.data)
   return render_template('form.html', form=form)



if __name__ == "__main__":
   app.run(debug=True)

パスワードを「password」に設定しました。

form.htmlにコードを追記しよう

前回と同じように「{% for %}」と「{% end for %}」を追加していきます。

<html>
   <head>
   <title>TestForm</title>
  </head>
  <body>
     <h1>入力フォーム</h1>
     <form method="POST" action="{{ url_for('form') }}">
        {{ form.csrf_token }}
        {{ form.username.label }}
        {{ form.username }}
        <div>
           {% for error in form.username.errors %}
           <span style="color: red;">{{ error }}</span>
           {% endfor %}
        </div>
        {{ form.password.label }}
        {{ form.password }}

---------------------------------------------------------
        <div>
           {% for error in form.password.errors %}
           <span style="color: red;">{{ error }}</span>
           {% endfor %}
        </div>
---------------------------------------------------------

        <input type="submit" value="送信">
     </form>
  </body>
</html>

これで試してみましょう。

確認してみよう

入力しているものが見えるように「PasswordField」を「StringField」に
変えて試してみます。

パスワードは「password」なので「123456」ではエラーが表示されます。

「password」と入力することで、この画面が表示されるはずです。

まとめ

「パスワード」の「バリデーション」に取り組んでみました。
「データベース」と組み合わせれば「パスワードの更新」につながるような気がしてきました。
チャレンジしていきたいと思います。
それではまた。

-プログラミング
-

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

【Python】画像を読み込んでみよう

Pythonのライブラリの中にある「OpenCV」を使って、画像処理をしていこうと思います。今回は、画像を読み込ませて表示させます。 Pythonで画像を読み込んでみよう Pythonで「画像処理」を …

【Python】リサイズした画像をExcelに貼ってみよう

前回は、画像を「openpyxl」でExcelシートに貼り付けることができました。今回は「OpenCV」を使って、リサイズしてから画像を貼り付けてみたいと思います。 リサイズした画像を貼ってみよう O …

【Python】VBAをPythonで再現してみる①

以前に「エクセル」で出来るプログラミングとして「VBA」を紹介しましたが今回は「Python」でその中身を再現していきたいと思います。 VBAをPythonで再現してみよう 「VBA(Visual B …

【SQLite】DBブラウザを使ってみよう

「SQLite」を「GUI」で管理できるものがあることを知りました。それが「DB Browser for SQLite」です。今回はこの「DBブラウザ」について紹介します。 DBブラウザを使ってみよう …

【Windows】ビット数を確認する方法

ソフトをインストールするうえで「64ビット」か「32ビット」で悩んだことはありますか?今回は、そんな「ビット数」の確認方法を紹介します。 ビットってなんだ? 「ビット」とは、コンピューターがデータを処 …

YouTube