WTFフォーム
wtf.py
flask_wtfのインポートFlaskForm から wtform インポートStringField、PASSWORDFIELD、SubmmitField App.configファイル[ " SECRET_KEY " ] = " 12345678 " クラスレジスタ(flaskform): ユーザ名 = StringField(" 用户名:"、render_kw = { " プレースホルダ":" 占位符" }) パスワード = PASSWORDFIELD(" 密码:" ) パスワード2 = PassswordField(" 确认密码。") 提出 = SubmitField(" 提交")
フラスコインポートフラスコrender_template から flask_wtfのインポートFlaskForm から wtformsはインポートStringField、PASSWORDFIELD、SubmitField アプリ =フラスコ(__name__ ) クラス:(FlaskForm)レジスタ 名 = StringField(" 用户名:"、render_kw = { ' プレースホルダ':「我是占位符" }) パスワード = PASSWORDFIELD(" 密码:" ) パスワード2 = PASSWORDFIELD("确认密码" ) 提出 = SubmitField(" 注册" ) @ app.route(" / "メソッド= [ " POST " " GET " ]) デフインデックス(): registerform = 登録() の戻り render_template(" demo4_template.html "、フォーム= registerform) の場合 __name__ == ' __main__ ' : app.run()
<!DOCTYPE HTML > < HTML のlang = "EN" > < ヘッド> < メタのcharset = "UTF-8" > < タイトル>タイトル</ タイトル> </ ヘッド> < ボディ> {#< フォームメソッド= "POST" > # } {# < ラベル>用户名:</ ラベル> < 入力タイプ= "テキスト" 名前=」= "ユーザー名を入力してください" > < BR /> #} {# < ラベル>パスワード:</ ラベル> < INPUTの種類= "パスワード" 名前= "パスワード" プレースホルダ= "パスワードを入力してください" > < BR /> #} {# < ラベル>パスワードの確認:</ ラベル> < 入力タイプ= "パスワード" 名前= "パスワード2" プレースホルダ= "確認パスワードを入力してください。" > < BR />#} {# < 入力タイプ= "送信"値= "注册" > #} {##} {#</ フォーム> #} < BR /> < BR /> < BR /> < フォームメソッド= "POST" > {{form.username.label}} { {form.username}} < BR /> {{form.password.label}}、{{form.password}} < BR /> {{form.password2.label}}、{{form.password2}} < BR /> {{form.submit}} </ フォーム> </ ボディ> </HTML >
CSRF
- クライアントは、リアへのインタフェースデータを要求すると、後端がクッキーcsrf_token応答の値に設定されています
- 隠されたフォームフィールド値の形式で追加することもcsrf_tokenです
- ユーザーがクリックを送信すると、私たちはバックグラウンドに要求を開始これら2つの値をもたらします
- バックエンドには、次へのリクエストがいくつかのイベントになります受け取ります:
- クッキーcsrf_tokenから削除
- 隠されたcsrf_tokenのフォームデータの値から削除
- 比較します
- 2後などの比較値があれば正常でない要求を表す、同じ以下を取らない場合、それは、通常の要求を表す、次のステップが実行されません