記事がいつでも首長歓迎訂正コードで間違った場所を持っていた場合は科学のフラスコも一週間以上あり、このWebフレームワークはまた、いくつかの基本的な知識、または白のものをコーミング、比較的低い書かれたコードを少し理解していますコードは予防CSRF上でコメントアウトされている、あなたは無視することができます
メインプログラムのスクリプト:
1 からフラスコインポートフラスコrender_template、要求、リダイレクト、なurl_for 2 。3 #インポートCSRFProtect flask_wtfから 。4 。5アプリ=フラスコ(__name__ )#__効果name__パラメータフラスコクラスを宣言し得るように、プログラムのルートを決定することですテンプレートファイル静的ファイル 。6 #[ "SECRET_KEYの"] App.configファイルの= "12345678" 。7 # 8 #CSRFProtect(APP) 。9 10 11 app.route @は(' / ' )#@ app.router()デコレータでありますその役割は、(それが機能の下に簡単に理解することができる実績がある)と、1つのURL(後の括弧内のセクション)、結合このURLにアクセスする際、ビュー機能を実行する関数を試してみることです 12 DEF (HelloWorldのを): 13 返すリダイレクト(なurl_for(「ホーム」なurl_for反転機能を表示する))、最初のパラメータは関数名ビュー、ビュー関数にパラメータがある場合は、最後に追加することができますが、あるURLを返し、それがカッコ内リダイレクトURLにリダイレクトされます、戻り値はなurl_forされる 14 15 16 app.route @(" / REGIST / "、メソッド= [ " 取得"、" POST " ])#方法割当要求のURLこのメソッドは、デフォルトでは、本明細書で指定された使用ゲットまたはポストの2つの方法で 17。 DEFのREGIST(): 18である のIF request.method == " GET " : 19 リターン render_template(" csrf_regist.html "ページをレンダリングする)#1 Render_template、受け付けたパラメータされるページが存在する場合、パラメータは背面にあってもよい 20 21である 他: 22である プリント要求をバックグラウンドでユーザ入力情報の後、出力された場合(のRequest.Form)#モード。request.args要求を取得取得し、ユーザによってフロントエンド要求入力を取得することができる、のRequest.Formポスト取得要求 23は、 24 リターンリダイレクト(なurl_for(「ログイン」))関数反転#ログイン・ビュー、およびリダイレクト 25 れる26 27 app.route @(" /ログイン/ "、メソッド= [ " GET "、" POST " ]) 28 DEF ログイン(): 29 IF request.method == " GET" : 30 戻り render_template(" csrf_login.html 」) 31 32 他: 33 プリント(のRequest.Form) 34 35 リターンリダイレクト(なurl_for(' 自宅' )) 36 37 38 app.route(@ ' /ホーム/ ' ) 39 デフ家(): 40 リターン render_template(' csrf_home.html ' ) 41 42 43 もし __name__ == "__main__ " : 44 app.run()
ホーム(csrf_home.html)コード
。1 <!DOCTYPE HTML> 2 <HTML LANG = " EN " > 3 <ヘッド> 4 <メタ文字セット= " UTF-8 " > 5 <タイトル> CSRFホーム</タイトル> 6 </ head>の 7 <身体> 。8 <H1>や</ H1>登録ホームページで、[ログへようこそ 9 <a href= "{{ url_for('login') }}"> ユーザーが着陸をクリックしたときに#</a>の着陸を、にジャンプランディングページ 10の<a href= "{{ url_for('regist')は}}"> </a>のサイン #ユーザーがクリックを登録すると、への登録ページジャンプ11 </ BODY> 12 </ HTML>
登録(csrf_regist.html)コード
<!DOCTYPE HTML> <HTML LANG = " EN " > <HEAD> <メタ文字コード= " UTF-8 " > <タイトル> CSRF的注册页面</ TITLE> </ HEAD> <BODY> <フォームアクション= ""、メソッド= " ポスト" > <TABLE> <TBODY> { # <TD>#} { # の<input type = "text"の名= "csrf_token"、値= "{{csrf_token()}}">#} { # </ TD>#} <TD> " <TR>ユーザ名:</ TR> <TR>の<input type = テキスト"名前= " ユーザ名"値= "" > </ TR> <BR> </ TD> <TD> <TR>密码:</ TR> <TR>の<input type = " パスワード"名前= " パスワード"値= "" > </ TR> <BR> の<input type = " 提出"値= " 注册" > </ TD> </ TBODY> </ TABLE> </フォーム> </ BODY> </ HTML>
着陸(csrf_login.html)コード
<!DOCTYPE HTML> <HTML LANG = " EN " > <HEAD> <メタ文字コード= " UTF-8 " > <タイトル> CSRF登陆页面</ TITLE> </ HEAD> <BODY> <フォームアクション= "" 、メソッド= " ポスト" > <TABLE> <TBODY> { # <TD>#} { # の<input type = "text"の名= "csrf_token"、値= "{{csrf_token()}}">#} { # </ TD>}# <TD> <TR>ユーザ名:</ TR> <TR>の<input type = " テキスト"名前= " ユーザ名"値= "" > </ TR> <BR> </ TD> <TD> <TR>密码:</ TR> <TR>の<input type = " パスワード"名前= " パスワード"値= "" > </ TR> <BR> <入力タイプ= " 提出"値= " 登陆" > </ TD> </ TBODY> </ TABLE> </フォーム> </ BODY> </ HTML>