2014-01-07 64 views
1

我有一个CherryPy的应用程序是这样的:如何在同一个cherrypy应用程序中使用多个调度程序?

import cherrypy 
from controllers import UsersController 

class Root(object): 


    exposed = True 

    def index(self): 
     return 'welcome' 


if __name__ == '__main__': 

    root = Root() 
    root.users = UsersController() 

    cherrypy.tree.mount(
     root, 
     '/', 
     { 
      '/users' : {'request.dispatch' : cherrypy.dispatch.MethodDispatcher()} 
     } 
    ) 

cherrypy.engine.start() 
cherrypy.engine.block() 

现在我希望用MethodDispatcher()用于提供REST的API /用户资源,我想为“/”的路径默认调度(其中以根通话.index()是预期的)。而不是写自己的RoutesDispatcher()有没有办法实现这一点? (例如,对于'/ users'使用MethodDispatcher(),如'/'使用DefaultDispatcher())?顺便说一句,我得到的错误是'Root' object is not callable

回答

2

由于您的Root要与正常的调度员一起提供,因此应为index.exposed = True

+0

谢谢。有效。但是我有一个疑问,'exposed = True'暴露了类,包括index(),对吗?那么为什么默认调度员不能像那样工作?我错过了非常基本的东西吗? – Sangram

+0

明白了。在类级别上设置的= exposed = True是为了调用特殊的方法(比如__call __())。为了暴露一个对象,需要暴露它的index()方法。现在有些清楚,但不完全。 – Sangram

相关问题