Использование CherryPy с диспетчеризацией маршрутов - PullRequest
2 голосов
/ 05 октября 2011

Я пытаюсь переключить приложение CherryPy со стандартной диспетчеризации CherryPy на RoutesDispatcher.

Следующий код Python правильно маршрутизирует / с использованием стандартной диспетчеризации CherryPy.Моя цель - преобразовать этот же код для запуска с использованием RoutesDispatcher.Я обнаружил фрагменты, которые я нашел, но не смог найти полный пример приложения CherryPy с использованием Routes.

class ABRoot:  

    def index(self):
        funds = database.FundList()
        template = lookup.get_template("index.html")
        return template.render(fund_list=funds)

index.exposed = True 

if __name__ == '__main__':
    cherrypy.quickstart(ABRoot(), '/', 'ab.config')

Я пытался объединить код из различных частичных учебных пособий, которыеЯ нашел без удачи.

Какие изменения я должен внести в __main__, чтобы загрузить и направить через RoutesDispatcher?

1 Ответ

4 голосов
/ 13 октября 2011

Вот код, который я в итоге получил. Изменения, которые мне нужно было сделать, были не сразу очевидны для меня:

  1. Мне пришлось перенести мою конфигурацию из файла в словарь, чтобы я мог добавить в нее диспетчера.

  2. Мне пришлось включить вызов cherrypy.mount перед cherrypy.quickstart.

  3. Я должен был включить dispatcher.explicit = False

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

class ABRoot:  

     def index(self):
         funds = database.FundList()
         template = lookup.get_template("index.html")
         return template.render(fund_list=funds)

if __name__ == '__main__':


     dispatcher = cherrypy.dispatch.RoutesDispatcher()
     dispatcher.explicit = False
     dispatcher.connect('test', '/', ABRoot().index)

     conf = {
    '/' : {
        'request.dispatch' : dispatcher,
        'tools.staticdir.root' : "C:/Path/To/Application",
        'log.screen' : True
    },
    '/css' : {
        'tools.staticdir.debug' : True,
        'tools.staticdir.on' : True,
        'tools.staticdir.dir' : "css"
    },
    '/js' : {
        'tools.staticdir.debug' : True,
        'tools.staticdir.on' : True,
        'tools.staticdir.dir' : "js"
    }
     }

     #conf = {'/' : {'request.dispatch' : dispatcher}}

     cherrypy.tree.mount(None, "/", config=conf) 
     cherrypy.quickstart(None, config=conf)
...