【问题标题】:how to use multiple dispatchers in same cherrypy application?如何在同一个cherrypy应用程序中使用多个调度程序?
【发布时间】:2023-03-29 13:38:01
【问题描述】:

我有一个这样的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() 为 /users 资源提供 REST api,并且我想要一个用于“/”路径的默认调度程序(需要调用 root.index())。除了编写自己的 RoutesDispatcher() 之外,还有什么方法可以实现这一点? (例如,对“/users”使用 MethodDispatcher(),如图所示,对“/”使用 DefaultDispatcher())?顺便说一句,我得到的错误是'Root' object is not callable

【问题讨论】:

    标签: cherrypy dispatcher


    【解决方案1】:

    由于您的Root 将由普通调度程序提供服务,因此它应该是index.exposed = True

    【讨论】:

    • 谢谢。有效。但我有一个疑问,exposed=True 暴露了类中的所有内容,包括 index(),对吗?那么为什么默认调度程序不能那样工作呢?我错过了一些非常基本的东西吗?
    • 知道了。 The exposed=True 在类级别上设置是为了使特殊方法(如 __call__())可调用。为了公开一个对象,需要公开它的 index() 方法。现在有点清楚了,虽然还不完全。
    猜你喜欢
    • 2014-02-27
    • 2014-05-27
    • 2011-12-29
    • 1970-01-01
    • 2016-04-17
    • 2012-08-17
    • 1970-01-01
    • 2016-08-04
    • 2015-02-02
    相关资源
    最近更新 更多