エンドポイントを解決フラスコ

1.フラスコ経路解析機能

@app.route('/user/<name>')
def user(name):
    return 'Hello, %s' % name

等価に

def user(name)
    return 'Hello, %s' % name
    
app.add_url_rule('/user/<name>', 'user', user)

add_url_ruleドキュメント内の関数は説明しました:

add_url_rule(* argsを、** kwargsからは)
URLルールを接続します。正確にルート()デコレータのように動作します。view_funcが提供されている場合には、エンドポイントに登録されます。

add_url_ruleパラメータ:

ルール -文字列(匹配的路由地址)などのURL規則
のエンドポイントの登録URLルールのエンドポイント- 。それ自体がエンドポイントとして表示する機能の名前を前提とフラスコ
view_func呼び出す関数設けられたエンドポイント(视图函数)にリクエストをサービング-
オプション -基本となるルールオブジェクトに転送するためのオプションを。WERKZEUGへの変更は、メソッドのオプションを処理しています。方法は、このルールは(GET、POSTなど)に限定されなければならないメソッドのリストです。デフォルトでは、ルールがちょうどGET(および暗黙的にHEAD)をリッスンします。フラスコ0.6以降では、OPTIONSは暗黙のうちに追加され、標準のリクエスト処理によって処理されます。

2.フラスコ要求決議

ユーザーのアクセスを想定http://www.example.com/user/ericフラスコは、ユーザー機能やパスを見つけるだろう、name='eric'この関数を実行し、値を返します。
しかし実際には、フラスコは本当にルートによる直接の関数であるが、それを見ますか?

ソースコードでは見つけることができます:

  • 各アプリケーションは、appいずれかを有しているview_functionsである、辞書、ストレージ終点view_funcキーと値のペア第1の効果は、のadd_url_ruleのview_functionsにキーを追加することです(アプリケーション・プロセスの前に実行)
  • 各アプリケーションがapp持っているurl_mapである、クラス地図werkzeug/routing.py含まれている)で、リストはリストの要素は、(ロールのインスタンスであるwerkzeug/routing.pyに)第二の機能は、実施例url_map役割にadd_url_ruleを追加することである(アプリケーションの実行に先立って処理)

ここでは、例を見ることができます:

app = Flask(__name__)

@app.route('/test', endpoint='Test')
def test():
    pass


@app.route('/', endpoint='index')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    print(app.view_functions)
    print(app.url_map)
    app.run()

プログラムの結果を実行します。

{'static': <bound method Flask.send_static_file of <Flask 'flask-code'>>, 'Test': <function test at 0x10065e488>, 'index': <function hello_world at 0x10323d488>}

Map([<Rule '/test' (HEAD, OPTIONS, GET) -> Test>,
 <Rule '/' (HEAD, OPTIONS, GET) -> index>,
 <Rule '/static/<filename>' (HEAD, OPTIONS, GET) -> static>])
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

url_mapは!URLおよびエンドポイントのマッピングを格納している
実際には、要求が来たときurlの時間を、最初に渡しますrule見つけることがendpoint(url_map)、その後応じてendpoint対応を見つけるためにview_func(view_functions)通常、エンドポイントとビュー名は、関数名と同じです。

实际上这个endpoint就是一个Identifier,每个视图函数都有一个endpoint,
当有请求来到的时候,用它来知道到底使用哪一个视图函数

3.フラスコビューリダイレクト

必要があるビュー内の別のビューにジャンプしたときに実際には、それは多くの場合、使用するurl_for(endpoint)機能にアドレスをハードコーディングされたのではなく、クエリビューに。
エンドポイントが照会するときに、この時間、私たちは、ビュー関数の名前を使用することはできません

app = Flask(__name__)
app.register_blueprint(user, url_prefix='user')
app.register_blueprint(book, url_prefix='book')

二つ以上の登録青写真

ユーザ(ない初期化処理)において:

# user.py

@user.route('/article')
def article():
    pass

書籍(初期設定ではないプロセス)で:

# book.py

@book.route('/article')
def article():
    pass

/articleこのルーティング関数名は、同じ機能の2つの図に対応するが、二つの別々の青写真です。ときにurl_for(article)時間を呼び出す(ノート、url_forによってendpointクエリのurlアドレスを、次にビュー機能を見つける)、フラスコは、最終用途での青写真は、それは次のように定義される必要がある時にエンドポイントを知っていません。

url_for('user.article')

4.リファレンス

おすすめ

転載: www.cnblogs.com/yueyun00/p/12399223.html