我知道在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
并且基于找到的值,我启动某个功能。
答案 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/
。