你好,穿越世界

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

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from pyramid.response import Response


class Resource(dict):
    pass


def get_root(request):
    return Resource({'a': Resource({'b': Resource({'c': Resource()})})})


def hello_world_of_resources(context, request):
    output = "Here's a resource and its children: %s" % context
    return Response(output)


if __name__ == '__main__':
    with Configurator() as config:
        config.set_root_factory(get_root)
        config.add_view(hello_world_of_resources, context=Resource)
        app = config.make_wsgi_app()
    server = make_server('0.0.0.0', 6543, app)
    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 您可以使用遍历,请参见 关于遍历的很多麻烦 .