如何在CherryPy中获取所需页面的名称?

时间:2014-03-12 11:19:58

标签: python web cherrypy

我知道在CherryPy请求的页面绑定到具有相同名称的函数。例如

import cherrypy
class HelloWorld(object):
    def index(self):
        return "Hello World!"
    def hello(self):
        return "Hello Hello2!"
    index.exposed = True
    hello.exposed = True

cherrypy.quickstart(HelloWorld())

如果我们转到127.0.0.1:8080/hello,我们会Hello Hello2!

但是,我需要一种更灵活的行为。我事先不知道要请求的URL,我只想用CherryPy确定所请求的URL。例如,如果请求127.0.0.1:8080/goodbye,我想知道某个变量等于goodbye并且基于找到的值,我启动某个功能。

2 个答案:

答案 0 :(得分:2)

+1 @ Burhan的回答。但是对于一个简单的工作示例,您只需要这样的东西:

import cherrypy

class HelloWorld(object):
    @cherrypy.expose
    def default(self, *args, **kwargs):
        return "Hello world!" + cherrypy.url()

cherrypy.quickstart(HelloWorld())

答案 1 :(得分:1)

CherryPy支持多种路由映射(称为调度)。来自dispatch documentation

def root_index(name):
    return "Hello, %s!" % name

def branch_leaf(size):
    return str(int(size) + 3)

mappings = [
    (r'^/([^/]+)$', root_index),
    (r'^/branch/leaf/(\d+)$', branch_leaf),
    ]

您可以看到root_index方法带有任意URL;并将url作为第一个参数(在本例中为 name )传递给方法。

您可以将正则表达式修改为更具包容性 - 文档中的表达式会跳过/,因此不会捕获/hello/world/