帮助我更好地理解CherryPy PageHandlers

时间:2009-07-02 20:42:31

标签: cherrypy

假设我有一些代码(使用CherryPy),如下所示:

import cherrypy

class Names:
    def index(self, name=None):
        return "Names.index:  " + str(name)
    index.exposed = True

class Root:
    def index(self):
        return "This is the root"
    index.exposed = True

if __name__ == "__main__":
    root = Root()

    root.names = Names()

    cherrypy.tree.mount(root, '/')
    cherrypy.engine.start()
    cherrypy.engine.block()

如果我点击网址 http://localhost:8080/names/ ,我会看到 Names.index:无,这很好。这意味着正在调用Names()类。

但是,如果我转到 http://localhost:8080/names/mark ,我会收到404错误,而不是我期待的 Names.index:mark

这让我感到困惑,因为根据PageHandler文档:

  

处理请求时,URI将拆分为其组件,并且每个组件将按顺序与树中的节点进行匹配。任何尾随组件都是“虚拟路径”组件,并作为位置参数传递。

现在假设我将Names()类更改为:

class Names:
    def index(self, name=None):
        return "Names.index:  " + str(name)
    index.exposed = True

    def name(self, name=None):
        return "Names.name:  " + str(name)
    name.exposed = True

现在我可以转到 http://localhost:8080/names/name/mark ,我看到 Names.name:mark

有人可以解释这里发生了什么吗?

1 个答案:

答案 0 :(得分:3)

索引方法是partial matching规则的例外。您可以改为使用默认方法,或者在此特定示例中,将名称设置为方法本身。