2010-08-29 2 views
2

Я нашел это regex based dispatcher, но я бы предпочел использовать что-то, что использует только литеральные префиксные строки. Существуют ли такие вещи?Non regex WSGI dispatcher

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

ответ

2

Не совсем то, что вы описали, но ваши потребности могут обслуживаться с помощью bottle. Декоратор 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) 
3

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

@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 

Update: Вопрос Per Мухаммада здесь является совместимым приложением минимальной WSGI с помощью 2 без регулярных выражений утилиты из Werkzeug - это просто принимает URL, если все путь только «/» вы получите приветственное сообщение, в противном случае вы получите 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.

+0

Это диспетчер wsgi в том смысле, что он передает HTTP-запросы в приложение wsgi? Или это то же самое, что «бутылка» в моем ответе, ожидает функции, которые работают с конкретной структурой? –

+0

См. Вторую ссылку, раздел быстрого запуска. Но да, вы могли бы использовать маршрутизацию Werkzeug только для чистой отправки wsgi, вы вызываете метод 'bind_to_environ' на объекте« Карта »с параметром wsgi environ запроса в качестве параметра в вашем приложении, и вы не работали - вы можете имеют приложение, совместимое с wsgi, с помощью только 'Map' и' Rule' в 6 строках кода. Материал Flask - всего лишь хороший набор утилит для работы с этими же объектами более прозрачным способом. – unmounted