2

PythonでSinatraのURLルーティングを再現する方法はありますか?そして、これが望ましくないかもしれない理由はありますか?

シナトラから:

get '/' do
    'Hello world!'
end

Flaskから(ルーティングにデコレータを使用):

@app.route("/")
def hello():
    return "Hello World!"

Sinatraは、Rubyブロックを通じてこの簡潔さを実現しています。

def get(path, opts={}, &block)
    conditions = @conditions.dup
    route('GET', path, opts, &block)

    @conditions = conditions
    route('HEAD', path, opts, &block)
end

PythonにはRubyブロックに完全に相当するものはありませんが、機能を再作成する方法はあると思います。これはどのように行うことができますか?

4

3 に答える 3

3

あなたが言ったように、Pythonにはルビーブロックのようなものはありません。デコレータは、ルーティングに一般的に使用されるソリューションです。もう1つの方法は、ルートを含むリスト/ dictを作成することですが、基になるコードの横にルート定義が必要なように見えるため、デコレータの方法を使用します。

于 2011-02-23T10:27:21.777 に答える
0

では、2 番目の質問である「これが望ましくない理由はありますか?」という質問に対して。

  • 関数に名前を付けると、さまざまなことが可能になりurl_for(some_function)、サイトの再構築が容易になります。
  • 名前付き関数は、テスト、docstring などを可能にします。
于 2011-05-18T16:30:13.857 に答える
0

もう 1 つの方法は、webpy のweb.autoapplicationソース コードで行われているように、メタクラスを使用することです。

于 2011-02-23T13:13:43.647 に答える