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

时间:2017-11-20 09:36:51

标签: python url cherrypy

我觉得我碰到了一堵砖墙,因为我没有随处可见,而且我相信,这是一项简单的工作。

我试图通过' / path / to / url'等方式生成一个网址,但是在注视多个StackOverflow Q& A' s时,正式文件为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找不到错误,而且我不确定我需要做什么,以使其正常工作。

我可能已经浏览过的任何提示和/或支持文档?

谢谢你们。

1 个答案:

答案 0 :(得分:1)

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

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

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

注意/input/stream而不是/stream

但是因为您正在使用MethodDispatcher,这可能会使您的端点返回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树中时不要实际调用方法,只需传入函数/类的名称