Не регулярный диспетчер WSGI - PullRequest
       23

Не регулярный диспетчер WSGI

2 голосов
/ 30 августа 2010

Я нашел этот диспетчер на основе регулярных выражений , но я бы предпочел использовать что-то, что использует только строки буквального префикса.Есть ли такие вещи?

Я знаю, что написать не сложно, но я бы не стал изобретать велосипед.

Ответы [ 2 ]

3 голосов
/ 30 августа 2010

Flask / Werkzeug имеет феноменальный диспетчер URL-адресов wsgi, который не основан на регулярных выражениях.Например, в Flask:

@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

Обновление: В соответствии с вопросом Мухаммеда, это минимальное wsgi-совместимое приложение с использованием 2 утилит без регулярных выражений из WerkzeugURL, если весь путь просто '/', вы получите приветственное сообщение, в противном случае вы получите 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 и т. д. Конечно, это сложнопревзойти приятные идиомы флаконов и бутылочек или тщательность и качество Werkzeug за пределами Map и Rule.

2 голосов
/ 30 августа 2010

Не совсем то, что вы описываете, но ваши потребности могут быть удовлетворены с помощью бутылка .Декоратор route более структурирован.Бутылка не содержит приложений WSGI, хотя может быть размещена как приложение WSGI.

Пример:

from bottle import route, run

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

run(host='localhost', port=8080)
...