你好,穿越世界

遍历是URL调度的一种替代方法,它允许金字塔应用程序将URL映射到代码。

如果代码比单词更响亮,也许这会有所帮助。下面是一个使用遍历的单文件金字塔应用程序:

 1from wsgiref.simple_server import make_server
 2from pyramid.config import Configurator
 3from pyramid.response import Response
 4
 5
 6class Resource(dict):
 7    pass
 8
 9
10def get_root(request):
11    return Resource({'a': Resource({'b': Resource({'c': Resource()})})})
12
13
14def hello_world_of_resources(context, request):
15    output = "Here's a resource and its children: %s" % context
16    return Response(output)
17
18
19if __name__ == '__main__':
20    with Configurator() as config:
21        config.set_root_factory(get_root)
22        config.add_view(hello_world_of_resources, context=Resource)
23        app = config.make_wsgi_app()
24    server = make_server('0.0.0.0', 6543, app)
25    server.serve_forever()

您可能会注意到,此应用程序有意与来自的“Hello World”应用程序非常相似。 创建您的第一个 Pyramid 应用 .

在第6-7行中,我们创建了一个 resource 类,它只是一个字典子类。

在第10-11行,我们硬编码A resource tree 在我们 root factory 功能。

在第14-15行中,我们定义了一个 view callable 它可以显示我们的 Resource 类,作为 context 参数。

其余的文件建立并服务于我们的 Pyramid WSGI应用程序。第22行是配置视图的位置,以便在遍历结束时使用 Resource 班级。

有趣的是,此应用程序中没有显式配置URL。相反,URL空间完全由资源树中的键定义。

示例请求

如果此示例在http://localhost:6543上运行,并且用户浏览到http://localhost:6543/a/b,则pyramid将调用 get_root(request) 要获取根资源,然后按键从那里遍历树;从根开始,它将找到具有键的子级 "a" ,然后是带有键的子级 "b" 然后用它作为 context 调用的参数 hello_world_of_resources .

或者,如果用户浏览到http://localhost:6543/,金字塔将停止在最外面的根目录。 Resource 例如,在本例中,将其用作 context 同一视图的参数。

或者,如果用户浏览到一个在这个资源树中不存在的密钥,例如http://localhost:6543/xyz或http://localhost:6543/a/b/c/d,遍历将以引发keyerror结束,而pyramid将把它转换为404 http响应。

更复杂的应用程序可以有多种类型的资源,每种类型都定义了不同的视图可调用文件,甚至每种类型都有多个视图。

参见

完整的技术细节可在 遍历 .

更多关于 why 您可以使用遍历,请参见 关于遍历的很多麻烦 .