2014-03-12 55 views
0

我知道在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

+1 @ Burhan的答案。然而,對於一個簡單的工作示例,你只需要像這樣:

import cherrypy 

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

cherrypy.quickstart(HelloWorld()) 
+0

雖然映射的例子是更加靈活和明確的,你的回答可能實際上是所有的OP實際上是尋找,+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/