2017-08-10 5 views
1

はそれが/GET呼び出し時に "hello" を返し、次のコードフラスコの.add_url_rule()の「終点」とは何ですか?

import flask 

class API: 
    def hello(self): 
     return flask.Response('hello', 200) 

api = API() 
app = flask.Flask(__name__) 
app.add_url_rule('/', 'hello', api.hello) 
app.run() 

を考えてみましょう。

documentation for add_url_rule

[add_url_rule]は正確にroute()デコレータと同じように動作することを述べています。

少なくとも3つのパラメータが必要です。第1と第3のものは理解でき、@route()の模倣品です。 2番目のものは何ですか(私の場合はhello)?登録したURLルールのエンドポイント -

ドキュメントには、さらに、これは

エンドポイントであると述べています。 Flask自体は、ビュー機能の名前をエンドポイントとして扱います

これはどういう意味ですか? URL(/)と(api.hello)を呼び出す方法が十分でないのはなぜですか? 「エンドポイント」の役割は何ですか?どのように正確に使用されていますか?

答えて

3

ルートの場合はの名前がです。たとえばurl_for() functionで使用するものです。エンドポイント名はビューの登録キーで、アプリケーションの他の部分からルートを参照できるシンボリック名です。

@route()は同じパラメータをとります。デフォルトは装飾された関数の名前です。これはadd_url_rule()ドキュメントならびに@route()のドキュメントの両方に記載されています:

  • エンドポイント - 登録したURLのルールのためのエンドポイント。 Flask自体は、ビュー機能の名前をエンドポイントと見なします。

(太字イタリック強調鉱山)。

基本的にはこの例:ドキュメントの例では、同じことを表示するようにしようとした

def index(): 
    pass 
app.add_url_rule('/', 'index', index) 

注:

@app.route('/') 
def index(): 
    pass 

は以下と等価です2番目の引数'index'が関数名と一致することを確認します。

+0

はい、これは私がドキュメントで読んだものですが、これがどのように役立つかを理解しようとしています。URLと呼び出されたメソッドだけです。あなたは 'url_for'と言いました - 私はそれのためのドキュメントを読んでいます(そして、それのための3つの良い理由の根拠を理解しようとします)。ポインタありがとう。 – WoJ

+0

@WoJ:短い記号名が、パターンを持つ可能性があるURLパスよりも優先されるためです。要件が変わると、シンボリック名が変更される可能性は低くなります。 –

関連する問題