2

この正規表現ベースのディスパッチャーを見つけましたが、実際にはリテラル プレフィックス文字列のみを使用するものを使用したいと考えています。そのようなものは存在しますか?

書くのが難しくないことはわかっていますが、車輪の再発明はしたくありません。

4

3 に答える 3

3

Flask / Werkzeugには、正規表現ベースではない驚異的な wsgi url ディスパッチャーがあります。たとえば、フラスコでは次のようになります。

@myapp.route('/products/<category>/<item>')
def product_page(category, item):
    pseudo_sql = select details from category where product_name = item;
    return render_template('product_page.html',\
                      product_details = formatted_db_output)

これにより、期待どおりの結果が得られます。つまり、http://example.com/products/gucci/handbagです。それは本当に素晴らしい API です。リテラルだけが必要な場合は、次のように簡単です。

@myapp.route('/blog/searchtool')
def search_interface():
    return some_prestored_string

更新:ここでの Muhammad の質問によると、Werkzeug の 2 つの非正規表現ユーティリティを使用する最小限の wsgi 準拠のアプリです。パス全体が単に '/' の場合は、ウェルカム メッセージが表示されます。それ以外の場合は、URL が逆になります。

from werkzeug.routing import Map, Rule

url_map = Map([
    Rule('/', endpoint='index'),
    Rule('/<everything_else>/', endpoint='xedni'),
])

def application(environ, start_response):
    urls = url_map.bind_to_environ(environ)
    endpoint, args = urls.match()
    start_response('200 OK', [('Content-Type', 'text/plain')])
    if endpoint == 'index':
        return 'welcome to reverse-a-path'
    else:
        backwards = environ['PATH_INFO'][::-1]
        return backwards

これは、Tornado、mod_wsgi などで展開できます。もちろん、Flask と Bottle の優れたイディオム、または Werkzeug の完全性と品質に勝るものはMapありませんRule

于 2010-08-29T22:01:48.817 に答える
2

あなたが説明したものとは正確には異なりますが、bottleを使用することでニーズを満たすことができます。routeデコレータはより構造化されています。Bottle は WSGI アプリをホストしませんが、WSGI アプリとしてホストすることはできます。

例:

from bottle import route, run

@route('/:name')
def index(name='World'):
    return '<b>Hello %s!</b>' % name

run(host='localhost', port=8080)
于 2010-08-29T21:22:12.467 に答える