3

フラスコのドキュメントから:

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

また、次のようにも述べています。

endpoint – 登録された URL ルールのエンドポイント。Flask自体は、ビュー関数の名前をエンドポイントとして想定しています

確かに、私がやればapp.add_url_rule('/', None, index)、すべてうまくいくようです。(用語と「エンドポイント」が実際に何であるかはわかりません。)

さらにいくつかの質問:

  1. 2 番目の引数を指定する理由はありますか?

  2. 2番目の引数は本当に「エンドポイント」ですか?

  3. 2 番目の引数を指定する (しない) ことの利点/欠点は何ですか?

  4. 同じ名前が別の URL ルールで使用されている場合はどうなりますか? 最初は上書きされますか?これは意図したものですか?

4

2 に答える 2

2

この場合、エンドポイントは単にアプリケーションの有効な URL を表す用語です。ウィキペディアから:

サービス指向アーキテクチャでは、エンドポイントは、サービス、プロセス、またはキューまたはトピックの宛先へのエントリ ポイントです。

URL の命名に関しては - はい、オプションです。名前を定義することにはいくつかの利点があります。たとえば*url_for*() またはredirect () を使用する場合、URL の名前をショートカットとして指定できます。これには、名前でのみ参照するため、その URL とやり取りするコードのすべての行を変更せずに URL 構造を変更できるという追加の利点があります。

したがって、あなたの例では、次のようにインデックス URL を参照できます。

return redirect('index')

最後の質問ですが、どうなるかわかりません。その名前で URL を解決しようとすると、エラーになる可能性があります。いずれにせよ、同じ名前で 2 つの異なる URL を定義する理由はありません。

于 2013-05-18T20:07:35.493 に答える
1

2 番目の引数の理由は次のとおりです。

あなたが Web サイトを設計していて/login、ユーザーがユーザー名、パスワード、OpenID などを入力するページになったとしましょう。ログインに成功したら、それらを に送信することをお勧めします/。Flask では、これを行う標準的な方法は次のとおりです。

return redirect(url_for('index'))

のハンドラーとして'index'定義した関数の名前はどこにありますか?/

@app.route('/')
def index():
    return render_template('index.html')

代わりに次のようにします。

def index():
    return render_template('index.html')

app.add_url_rule('/', None, index)

ユーザーが明示的に要求し/た場合は問題なく動作しますが、ユーザーがログインに成功すると、恐ろしいエラー メッセージが表示され、/手動でアクセスする必要があります。

要するに、それは適切なことです。

また、次のことに注意してください。

@app.route('/')
def index():
    return render_template('index.html')

def index():
    return render_template('index.html')

app.add_url_rule('/', 'index', index)

まったく同じで、これらの最後の 2 つのスニペットの両方でredirect(url_for('index'))完全に機能します。

于 2013-05-18T20:19:20.440 に答える