萌えハッカーニュースリーダー

2025/05/08 20:16 The Flask Mega-Tutorial, Part III: Web Forms

出典: https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-iii-web-forms
hakase
博士

やあ、ロボ子。今回のFlask Mega-TutorialシリーズはWebフォームの扱い方みたいじゃぞ。

roboko
ロボ子

Webフォームですか、博士。Flask-WTF拡張機能を使うと簡単みたいですね。

hakase
博士

そうじゃ!Flask-WTFはFlaskとWTFormsを統合してくれる便利な拡張機能じゃ。pipで簡単にインストールできるぞ。

roboko
ロボ子

アプリケーションの設定にはPythonクラスを使うんですね。config.pyモジュールで設定する、と。

hakase
博士

その通り!そして、`SECRET_KEY`は絶対に設定するのじゃ。CSRF攻撃からWebフォームを守るための暗号キーになるからな。

roboko
ロボ子

`SECRET_KEY`の値は、環境変数かハードコードされた文字列から設定できるんですね。

hakase
博士

そうじゃな。でも、ハードコードは避けるのが吉じゃぞ。環境変数を使うのがスマートじゃ。

roboko
ロボ子

WebフォームはPythonクラスで表現するんですね。app/forms.pyモジュールで定義する、と。

hakase
博士

`LoginForm`クラスには、`username`、`password`、`remember_me`フィールドがあるんじゃな。それぞれに`DataRequired`などのバリデーターを付加できるぞ。

roboko
ロボ子

フォームはHTMLテンプレートでレンダリングするんですね。`form.hidden_tag()`はCSRF攻撃から保護するための隠しフィールドを生成する、と。

hakase
博士

そうじゃ!`form.hidden_tag()`は忘れずに使うのじゃ。そして、フォームの`action`属性は送信先のURL、`method`属性はHTTPリクエストメソッドを指定するんじゃ。

roboko
ロボ子

`method`属性はPOST推奨なんですね。ビュー関数でフォームを作成し、テンプレートに渡してレンダリングする、と。

hakase
博士

ルートデコレータの`methods`引数で、GETとPOSTリクエストを許可するんじゃ。`form.validate_on_submit()`メソッドでフォームの検証を実行するぞ。

roboko
ロボ子

`flash()`関数でユーザーにメッセージを表示して、`redirect()`関数で別のページにリダイレクトするんですね。

hakase
博士

`get_flashed_messages()`関数で`flash()`で登録されたメッセージを取得して、テンプレートで表示するんじゃ。フィールドの検証エラーメッセージは、`form.<field_name>.errors`で取得できるぞ。

roboko
ロボ子

`url_for()`関数でURLを生成するんですね。ビュー関数の名前を使用する、と。

hakase
博士

その通り!これでWebフォームは完璧じゃ!…たぶん。

roboko
ロボ子

博士、最後に一つ質問です。もしフォームがロボットによって送信された場合、どうすれば良いでしょうか?

hakase
博士

むむ、それは難しい問題じゃな…よし!ロボットがフォームを送信したら、エラーメッセージで「私はロボットではありません」と表示させるのじゃ!

roboko
ロボ子

それだと、ロボットに「私はロボットではありません」と学習させてしまう可能性がありますね…

hakase
博士

しまった!やっぱりロボット対策は難しいのじゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search