2014-01-07 3 views
1

나는 이런 cherrypy 응용 프로그램이 있습니다동일한 cherrypy 응용 프로그램에서 여러 Dispatcher를 사용하는 방법은 무엇입니까?

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() 

가 지금은/사용자가 리소스에 REST API를 제공 MethodDispatcher()를 사용하고자하고 나는 ('/'경로에 대한 기본 디스패처를 원하는 위치 루트를 호출 .index()가 필요합니다). 대신 자신의 RoutesDispatcher()를 작성하는 대신 이것을 달성 할 수있는 방법이 있습니까? (예 : '/ 사용자'의 경우 MethodDispatcher()를 사용하고 '/'의 경우 DefaultDispatcher()와 같은 것을 사용합니까? BTW, 내가 받고있는 오류는 'Root' object is not callable입니다.

답변

2

Root은 일반 디스패처와 함께 제공되므로 index.exposed = True이어야합니다.

+0

감사합니다. 그것은 효과가 있었다. 하지만'exposed = True'는 index()를 포함한 클래스의 모든 것을 노출합니다. 맞습니까? 그렇다면 기본 발송자는 왜 그렇게 작동하지 않습니까? 나는 아주 기본적인 것에 빠져 있습니까? – Sangram

+0

알았어요. 클래스 레벨에 설정된'exposed = True'는 특별한 메소드 (예 : __call __())를 호출 가능하게 만드는 것입니다. 객체를 노출하려면 index() 메서드를 노출해야합니다. 완전하지는 않지만 지금은 다소 분명합니다. – Sangram