0Pricing
Flask Academy · レッスン

validate_on_submitとCSRFトークン

有効なPOSTを処理し、偽造リクエストを阻止します

「validate_on_submitとCSRFトークン」はCoddyKit上の無料Flask Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはFlask Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Flask Academyコースには全4レッスンが含まれています。

基本となるメソッド

Flask-WTFには、すべてを一度に確認できるメソッドがあります。validate_on_submitは、フォームを安全に処理するための中心となる機能です。🔑

実際に確認していること

validate_on_submitは、リクエストがPOSTで、すべてのバリデーターを通過した場合にのみTrueを返します。1回の呼び出しで両方の条件を確認できます。

if form.validate_on_submit():
    pass  # safe to use the data

標準的なビューのパターン

この形はすべてのFlaskアプリで繰り返し使います。フォームを作成し、validate_on_submitの結果で分岐し、その後ページをレンダリングします。

form = LoginForm()
if form.validate_on_submit():
    return redirect('/home')
return render_template('login.html', form=form)

送信済みと有効の違い

この2つを混同しないでください。is_submittedはメソッドだけを確認しますが、validate_on_submitはデータがすべてのルールを通過したことも確認します。

form.is_submitted()        # POST? 
form.validate_on_submit()  # POST and valid?

CSRFが重要な理由

CSRF攻撃は、ログイン中のユーザーをだまして、意図していないフォームを送信させます。トークンによって、そのリクエストが自分のページから送られたことを証明できます。

SECRET_KEYが必要

CSRFトークンには署名が付けられるため、FlaskにはSECRET_KEYが必要です。これがないと検証に失敗し、Flask-WTFはフォームを保護できません。

app.config['SECRET_KEY'] = 'change-me-in-production'

ページ内のトークン

hidden_tagの呼び出しによって、署名付きトークンが非表示の入力要素として埋め込まれます。ブラウザーは送信のたびにそれを返します。

{{ form.hidden_tag() }}

バリデーションでトークンを比較する

送信時にFlask-WTFは、送信されたトークンとセッション内のトークンを比較します。トークンがない場合や古い場合、validate_on_submitはFalseを返します。

if not form.validate_on_submit():
    pass  # bad token or failed rule

失敗した理由を確認する

バリデーションに失敗したら、form.errorsを確認します。各フィールド名に対して、問題を説明するメッセージのリストが対応しています。

if not form.validate_on_submit():
    print(form.errors)

処理してからリダイレクトする

送信が成功したら、最後にredirectします。これによりPRGパターンに従い、更新による二重送信を防げます。

if form.validate_on_submit():
    save(form.data)
    return redirect('/done')

CSRFを無条件に無効化しない

APIではCSRFを無効にできますが、ブラウザーフォームでは絶対に無効にしないでください。保護を有効に保つことが、Flask-WTFを使う価値につながります。

クイックチェック

form.validate_on_submit()がTrueを返すのはどのような場合ですか。

まとめ

メソッドとルールをまとめて確認するためにvalidate_on_submitを使い、署名付きCSRFトークンのためにSECRET_KEYを設定し、成功後にリダイレクトする方法を学びました。🛡️

よくある質問

「validate_on_submitとCSRFトークン」レッスンは無料ですか?

はい。「validate_on_submitとCSRFトークン」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Flask Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Flask Academyコースには全4レッスンが含まれています。

「validate_on_submitとCSRFトークン」で何を学びますか?

有効なPOSTを処理し、偽造リクエストを阻止します ブラウザで直接実行するハンズオンコードでFlask Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Flask Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのFlask Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「validate_on_submitとCSRFトークン」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このFlask Academyレッスンでコードを書いて実行できますか?

はい。すべてのFlask Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. FlaskFormクラスを定義する
  2. フォームをレンダリングして送信する
  3. validate_on_submitとCSRFトークン
  4. カスタムバリデーターとフィールドエラー
← Flask Academyに戻る