cherrypy.tree.mount与mod_wsgi

4 投票
1 回答
2641 浏览
提问于 2025-04-16 10:32

我之前用的是cherrypy配合mod_python,构建了我的控制器树,使用的是cherrypy.tree.mount这个方法,而且这些调用分散在代码中。现在我需要使用mod_wsgi。举个例子,可以参考一下这个链接:来自cherrypy的wiki

import sys
sys.stdout = sys.stderr

import atexit
import threading
import cherrypy

cherrypy.config.update({'environment': 'embedded'})

if cherrypy.__version__.startswith('3.0') and cherrypy.engine.state == 0:
    cherrypy.engine.start(blocking=False)
    atexit.register(cherrypy.engine.stop)

class Root(object):
    def index(self):
        return 'Hello World!'
    index.exposed = True

application = cherrypy.Application(Root(), script_name=None, config=None)

我的问题是,每次调用cherrypy.tree.mount都会创建一个cherrypy.Application对象。而mod_wsgi只想要一个名为'application'的对象。

我知道可以用类变量来构建cherrypy树,但我不想那样做。

有没有办法使用cherrypy.tree.mount同时得到一个应用对象呢?

还有cherrypy.tree.graft这个方法,但我觉得它是用来做其他事情的。

1 个回答

9

终于!我自己搞定了——从手册上找到的...

cherrypy.tree 本身就是一个 WSGI 对象,所以你只需要这样做:

cherrypy.tree.mount(...)
cherrypy.tree.mount(...)
cherrypy.tree.mount(...)
application = cherrypy.tree

撰写回答