6

Djangoには「バッテリーが含まれている」ため、どちらがより快適かを確認するために、ボトルとフラスコの両方でアプリケーションを構築しています。

両方のルーティングに関するドキュメントを読みましたが、非常に明確で理解しやすいものでしたが、未知の、おそらく無制限の数の URL セグメントを処理する方法を見つけるのに苦労しています。すなわち:

http://www.example.com/seg1/seg2/seg3/seg4/seg5.....

私は次のようなものを使用して見ていました

@app.route(/< path:fullurl >)
正規表現を使用して不要な文字を削除し、fullurl 文字列をセグメント数と同じ長さのリストに分割しますが、これは非常に非効率的です。

ほとんどの PHP フレームワークには、数に関係なくセグメント変数名の配列を作成する方法があるようですが、Flask、Bottle、Django のいずれにも同様のオプションがないようです。変数をキャプチャするには、正確な数のセグメントを指定する必要があるようです。いくつかの PHP cms は、最初の 9 つのセグメントを変数としてすぐに収集するように見えます。

URL ルーティングの仕組みを理解していないのでしょうか? 文字列分割方法は本当に非効率的ですか、それとも最善の方法ですか? または、不明な数のセグメントを Flask の変数に直接収集する方法はありますか?

私は Python フレームワークに関してかなり新しいので、5 歳児向けの説明が役に立ちます。

どうもありがとう。

4

3 に答える 3

15

私自身、Flask にはかなり慣れていませんが、これまでに調べたことから、1 つの巨大で優れたスイッチング ビーストではなく、多数の小さなルート/ビュー メソッドが存在するという考えに間違いないと確信しています。

たとえば、次のような URL があるとします。

http://example.com/unit/57/
http://example.com/unit/57/page/23/
http://example.com/unit/57/page/23/edit

次のようにルーティングします。

@app.route('/unit/<int:unit_number>/')
def display_unit(unit_number):
    ...

@app.route('/unit/<int:unit_number>/page/<int:page_number>/')
def display_page(unit_number, page_number):
    ...

@app.route('/unit/<int:unit_number>/page/<int:page_number>/edit')
def page_editor(unit_number, page_number):
    ...

このようにすると、URL を取得してすべてのルーティングを自分で行うのではなく、アプリケーションにある種の構造を維持し、フレームワークに依存してルーティングを行うことができます。その後、ブループリントを使用してさまざまな機能を処理することもできます。

認めますが、URL におそらく無制限の数のセクションが必要になる状況を考えるのに苦労していますか?

于 2012-05-28T10:03:47.877 に答える
4

文字列を分割しても、プログラムが非効率になることはありません。パフォーマンスに関しては、フレームワークによって行われる URL 処理への追加はごくわずかです。また、1 行のコードにも収まります。

@app.route('/<path:fullurl>')
def my_view(fullurl):
    params = fullurl.split('/')
于 2012-05-28T05:34:39.317 に答える
2

動作します:</p>

@app.route("/login/<user>/<password>")
def login(user, password):
    app.logger.error('An error occurred')
    app.logger.error(password)
    return "user : %s password : %s" % (user, password)

それから:

http://example.com:5000/login/jack/hi

出力:

user : jack password : hi
于 2013-07-14T12:54:18.473 に答える