2

在 CherryPy 文档的“调度/其他调度程序”部分中,有一个 Django 样式的正则表达式到视图函数映射定义的示例,但没有说明如何将其附加到cherrypy.tree.

你应该如何注册这个映射?

编辑:基于Google 组中的“正则表达式 URL 映射”线程cherrypy-users,我可以发现要使用正则表达式附加视图,您需要使用routes-style 使用cherrypy.dispatch.RoutesDispatcher类的映射,如下所示:

def hello(name='stranger'):
    """Sample view."""
    return 'Hello, %s!'%name

dispatch = cherrypy.dispatch.RoutesDispatcher()
dispatch.connect('hello-1', '/hello', hello)
dispatch.connect('hello-2', '/hello/{name:([^/]+)}', hello)
cherrypy.tree.mount(None, config={
        '/': {
             'request.dispatch': dispatch,
            }
        })

请注意{argument-name:regular-expression}URL 模式中的语法。

有没有办法使用 CherryPy 文档中所示的 list-of-pairs 语法来指定路由模式?

4

1 回答 1

0

不需要任何额外的步骤。在请求期间,cherrypy.tree执行第一个路由阶段,其中传入请求使用其路径到应用程序的映射映射到应用程序。当您tree.mount(root=None, script_name='/', config=conf)在启动时调用时,Tree 会在幕后为您创建一个 cherrypy.Application 并将其安装在“/”处。

一旦找到应用程序,它的配置就会接管,并且文档中示例应用程序的“request.dispatch”配置说“对这个应用程序中的所有 URI 使用 RoutesDispatcher”。然后,RoutesDispatcher 实例会将请求的控制权传递给适当的控制器。

文档中的正则表达式示例甚至没有那么完善。您需要编写一个使用它的 Dispatcher。该过程“仅”需要找到处理程序并收集 request.config,但这两个活动可能非常复杂,具体取决于所选的调度样式。请参阅现有调度程序以获取灵感。

于 2012-06-22T02:16:16.217 回答