まず、ビュー機能
1.1基本的な使い方
の機能を試すには、app.routeまたはbp.route(青写真)デコレータ装飾的な機能です。この関数の実装URLパスの変換は、即ちルーティング機能は、例えば、次のコードは、デフォルトのURL「/」と「/インデックス/」リクエストURLを定義します。
@ app.route(' / ' ) @ app.route(' /インデックス/ ' ) デフ()hello_world: リターン ' ハローワールド'
関数にしようとすると、HTTPリクエストメソッド、ルートデコレータでパラメータ渡す方法を指定することができます
@ app.route(' /ログイン/ '、メソッド= [ ' GET '、' POST ' ])
1.2パスパラメータ
特定の機能のURL要求と一致するようにしようと、多くの場合、あなたは、このような現在のページ番号を渡して、パラメータを渡す必要があります
app.route @(' / article_list / <int型:ページ> / ' ) DEFのarticle_list(ページ): リターン " あなたが見るページ%sの"%ページ #http://127.0.0.1:5000/article_list/3
入ってくるint型のパラメータページとして、ときに自動的に割り当てページ3への要求URL;
パラメータタイプビュー機能をサポート文字列、整数、フロート、経路、UUID、パラメータ変換器のいずれか6種類、前記変換器と、デフォルトの文字列(デフォルトでは、デフォルトの呼び出し)。
@ bp.route(' /ユーザ/ <ユーザー名> ' ) @login_required デフユーザー(ユーザー名): ユーザー = User.query.filter_by(ユーザー名=ユーザー名).first_or_404()
コールなどの文字列にマッチするデフォルトの文字列コンバータのURLコンテンツは、ユーザー名変数に渡されます。
路変換器と同様の文字列が、着信ファイルのパス区切り文字「/」。UUID UUIDコンバータは、文字列を入力として受け取り、変更が自動的にPythonオブジェクトです。
マッチング関数は、2つの異なる経路を表示できるように、任意の変換器は、マップを提供します。
@ app.route(' / <任意の(約、ヘルプ、インプリント、クラス、 "FOO、BAR"):PAGE_NAME> ' ) DEF 詳細(PAGE_NAME): もし == PAGE_NAME ' について' : リターン ' のページについて' 他: ...
マルチパラメータマッチング、クエリ検索結果ページの単語に次のコード。
@ app.route(' / <wrod> / <int型:ページ> ' ) DEF 検索(単語、ページ): リターン []
1.3カスタム・コンバータ
フラスコは、コンバータは、需要の大半を解決することができます提供しますが、カスタムコンバータを必要とするプロセスに素晴らしい仕事のニーズは、常にあります。
カスタムコンバータは、次の3つの手順が必要です。
1)自分の相続BaseConverterコンバータを実現します:
werkzeug.routing インポートBaseConverter クラスMapConverter(BaseConverterを): DEF to_python(自己、値): "" " 私たちはのデータ型変換する必要があるURLパラメータ :; D A BをC """ #文字列として辞書型データ作成 (KVS = values.splitを' ; ' ) RES = [] のためキロボルトでKVS: (K、V) = kv.split(' :' ) RES [K、V] 戻りRES DEFのto_url(セルフ、値): "" " 辞書型データ{ '': 'B' 、 'C': 'D'は} ; C B:Aに変換され、D; "" " #BaseConverter.to_url URLエンコードされた RESを= ' ; ' .join ([BaseConverter.to_url(セルフ、K + ' :' +値[K])のための K でvalues.keys()]) 戻り RES
二つの方法to_python達成するために必要とto_url、対象とPythonの間の遷移を表す文字列として
2)私は、コンバータを追加する必要がありフラスコに教えます:
app.url_map.converters [ ' マップ' ] = MapConverter
3)開始
@ app.route(' /詳細/ <リスト:のparams> / ' ) デフ詳細(のparams): プリント ' parmas:%sの'%のparams リターン ' URLの成功' app.test_request_context()を持つ: プリント " 詳細函数的URL是:%S '%flask.url_for(' 詳細'、paramsは= [1、2、3])
二、URLリバース機能
ビュー機能は、特定のURLの関数で変換を指します。
なurl_for(エンドポイント、**値)
最初のパラメータエンドポイントビュー機能は、名前、2番目のオプションパラメータに対応する文字列になり、パラメータはURLを渡す必要があります。
例えば:
@ app.route(' / ' ) DEF hello_world(): プリント((なurl_for ' my_listという'、ページ= 1 )) のリターン ' こんにちは世界' @ app.route(' /リスト/ <ページ> ' ) DEF my_listという(のページ): リターン ' my_listという'
なurl_for my_listという文字列関数、次のように最終的な印刷されたページ・パラメータの結果を受信する方法の試みの最初のパラメータとしての第3行目:
/リスト/ 1
なurl_for三行目であれば1つの以上のパラメータ数
印刷((なurl_for ' my_listという'、ページ= 1、カウント数= 2))
印刷結果
/リスト/ 1 /?数= 2
一方なurl_for自動的に特別な文字列を処理します。
2.1、テンプレートの逆関数を用いて
また、テンプレートには、たとえばなurl_for使用することができます。
<a href= "{{ url_for('login') }}"> 登录する</a>
HTMLのheadでは、多くの場合、エンドポイントの着信静的なurl_forこの時間は、ファイル名が相対パスで渡された、いくつかの静的なファイルを導入する必要があります
<スクリプトSRC = " {{なurl_for( '静的'、ファイル名= 'JS / index.js')}} " > </ SCRIPT>
静的なカタログは、同じレベルのディレクトリをテンプレート。
完全なパスを取得する方法2.2、URL
URLパラメータは、現在のアプリケーションへの相対パスを取得しているとして、なurl_forは相対的なウェブサイトへの絶対パスを取得することができますか?
例えば、http://127.0.0.1の訪問で私たちの地元のウェブサイトは、我々は完全な取得なurl_for方法で_external = Trueのパラメータを追加することができると思うhttp://127.0.0.1/list/1
{{なurl_for(' reset_password '、トークン=トークン、_external =真)}}
パスワードのリセット電子メールのテキストの行として、我々は、パスワードのリセットメッセージを送信するとき、あなたは絶対パスを送信する必要があり、あなたは_external = Trueの追加することができます。