CodeIgniter-подобные маршруты в CherryPy - PullRequest
0 голосов
/ 12 апреля 2011

Я исхожу из PHP-фреймворков, и одна вещь, которая мне нравится в них, заключается в том, что о маршрутизации я позабочусь: я могу сбросить все свои контроллеры в каталог controllers, и он автоматически вызовет Posts::delete(12) когда пользователь посещает http://www.example.com/posts/delete/12. Я понимаю, что могу использовать Routes с CherryPy, но меня раздражает то, насколько ограничена документация - нет ничего о том, как мне отформатировать имя класса (я должен называть его PostsController ()? Это вообще волнует?), использование routes.mapper.connect() против routes.connect(), и что происходит, когда он вызывает маршрут по умолчанию (/:controller/:action/:id).

Мне бы очень хотелось использовать Python, но я не хочу определять каждый отдельный маршрут. Может кто-нибудь указать мне на новое руководство по веб-фреймворку Python о том, как использовать Маршруты, или просто объяснить, как можно структурировать веб-приложение CherryPy, чтобы у меня была пара выложенных Маршрутов, например

d = cherrypy.dispatch.RoutesDispatcher()
d.mapper.connect('main', '/:controller/:action', controller='root', action='index')
d.mapper.connect('main', '/:controller/:action/:id', controller='root', action='index')

и он справится со мной? Спасибо.

1 Ответ

2 голосов
/ 21 апреля 2011

Простой способ - использовать cherrypy.tree.mount для монтирования объекта контроллера. Структура контроллера даст вам ваши основные маршруты.

Например:

import cherrypy

class AppRoot:
    def index(self):
        return "App root's index"
    index.exposed = True

    controller1 = Controller1Class()
    # controller2 = Controller2Class(), etc.

class Controller1Class:

     def index(self):
         return "Controller 1's index"
     index.exposed = True

     def action1(self, id):
         return "You passed %s to controller1's action1" % id      
     action1.exposed = True

     # def action2(self, id): etc...

# ... the rest of the config stuff ...

cherrypy.tree.mount(AppRoot(), '/')  

# ... the rest of the startup stuff....

Вызов следующих URI вызовет следующие методы:

Смотри также:

...