2015-02-27 1 views
0

Я хочу направить запросы так же, как это делает Python web.py или Python.Декоратор или диспетчер для маршрутизации URL-адресов RESTful в CherryPy

С этими рамками вы можете просто добавить тег в URL, который может быть использован для передачи параметров, например:

@route('/api/part1/<tag1name>/part2/<tag2name>') 
def handlerfunction(self, tag1name, tag2name): 

CherryPy действительно есть popargs декоратор, например

@cherrypy.popargs('name') 

Однако когда более чем одно значение, закодированное в URI, становится довольно неудобным для правильного назначения им параметров.

Кроме того, я хочу, чтобы иметь возможность маршрутизировать на основе метода HTTP-запроса, в соответствии с методом CherryPy MethodDispatcher.

+0

Я думаю, что лучше сделать маршрутизацию в режиме CherryPy, и эти декораторы рассеивают маршрутизацию между обработчиками, тогда как лучше управлять ими в одном месте (диспетчер маршрутов) или вообще нет места (диспетчер обхода дерева объектов по умолчанию). Но если вы действительно ищете специальный способ, то, что называется [cherryontop] (https://github.com/csira/cherryontop), недавно появилось на CherryPy twitter. Это может быть не очень полезно, но вы можете найти идеи для реализации такого декоратора. – saaj

ответ

1

Ответ заключается в использовании модуля маршрутизации URL-адреса, такого как «Routes». «Маршруты» разрабатываются в первую очередь для Pylons, но имеют поддержку CherryPy.

Из Documentation:

Маршруты является Python повторное внедрение системы маршрутов Rails для отображения URL-адресов на действия приложений, и, наоборот, для создания URL. Маршруты позволяют легко создавать красивые и сжатые URL-адреса, которые RESTful с минимальными усилиями.
Маршруты позволяют условное сопоставление на основе домена, куки, HTTP-метода или пользовательской функции. Подпольная поддержка встроена. Маршруты поставляются с обширным набором тестовых модулей.

После обработки документации и ее работы с CherryPy я обновляю этот ответ с помощью некоторых конкретных примеров реализации CherryPy.