2014-01-07 68 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

相關問題