如何使用 cherrypy 生成多个 URL 路径?

How can I generate multiple URL paths with cherrypy?

我觉得自己 运行 陷入了困境,因为我对此一无所获,而且我相信这是一项简单的任务。

我正在尝试通过“/path/to/url”之类的人生成一个 URL,但是在查看多个 Whosebug 问答和 cherrypy 的官方文档后,我似乎仍然无法总结我的解决这个问题。

到目前为止,这是我的代码:

import details
import input_checker as input
import time

import cherrypy

class Index(object):

    @cherrypy.expose
    def input(self):
        return input.check_input()

    @cherrypy.expose
    def stream(self):
        while True:
            return 'Hey'
            #return input.check_input()
            time.sleep(3)

if __name__ == '__main__':
    index = Index()
    cherrypy.tree.mount(index.stream(), '/input/stream', {})
    cherrypy.config.update(
        {'server.socket_host': '0.0.0.0'})
    cherrypy.quickstart(index)

所以基本上,我希望能够访问 http://127.0.0.1:8080/input/stream,我将返回给定的结果。

执行此代码及其多个变体后,我仍然返回 404 未找到错误,我不确定我需要做什么才能使其正常工作。

我可能浏览过的任何提示 and/or 支持文档?

谢谢大家。

所以这里有几个问题,为什么要使用 MethodDispatcher 你真的需要它吗?

要在 /input/stream 上为您提供 stream 功能,您必须这样安装它:

cherrypy.tree.mount(index.stream(), '/input/stream', your_config)

注意 /input/stream 而不是 /stream

但是因为您使用的是 MethodDispatcher 这可能会使您的端点 return 405 因为此端点不允许 GET - 要解决此问题只需删除 MethodDispatcher 位。

但是,如果您确实需要 MethodDispatcher,您将不得不重构一些类似的东西:

class Stream:
    exposed = True # to let cherrypy know that we're exposing all methods in this one

    def GET(self):
        return something

stream = Stream()
cherrypy.tree.mount(stream , '/index/stream',
    {'/':
        {'request.dispatch': cherrypy.dispatch.MethodDispatcher()}
    }
)

同时确保在将它们安装到 cherrypy 树时不会实际调用您的方法,只需传入 function/class

的名称