(機械翻訳) こんにちはトラバーサルワールド

トラバーサルは、URLディスパッチの代わりに、PyramidアプリケーションがURLをコードにマッピングできるようにします。

コードが言葉よりも大声で話すなら、多分これが助けになるでしょう。ここでは、トラバーサルを使用する単一ファイルのPyramidアプリケーションを示します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
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__':
    config = Configurator(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', 8080, app)
    server.serve_forever()


このアプリケーションは意図的に"hello world "アプリケーションと非常によく似ていることがわかります:doc: firstapp

5-6行目で、辞書サブクラスであるtrivial:term: `resource`クラスを作成します。

8-9行目では、:term: root factory`関数で:term: resource tree`をハードコードしています。

11行目から13行目では、 context``引数として渡される Resource``クラスの単一のインスタンスを表示できる単一の:term: view callable`を定義します。

残りのファイルは、私たちの:app: Pyramid WSGIアプリケーションを設定し、提供します。 18行目は、 `` Resource``クラスのインスタンスで走査が終了するたびにビューが使用されるように設定されています。

興味深いことに、このアプリケーションでは明示的に構成されたURLはありません。代わりに、URLスペースはリソースツリー内のキーによって完全に定義されます。

リクエスト例

この例がhttp:// localhost:8080上で実行されていて、ユーザがhttp:// localhost:8080 / a / bを参照すると、Pyramidは `` get_root(request) ``を呼び出してルートリソースを取得し、そこからの木の鍵。ルートから始めて、キー `` "a " ``を持つ子、次にキー `` "b " ``を持つその子を見つけます。それを `` hello_world_of_resources``を呼び出すための `` context``引数として使用してください。

あるいは、ユーザがhttp:// localhost:8080 /を参照すると、ピラミッドはルート(この場合は最も外側の `` Resource``インスタンス)で停止し、それを同じ `` context``引数として使用しますビュー。

または、http:// localhost:8080 / xyzまたはhttp:// localhost:8080 / a / b / c / dのように、このリソースツリーに存在しないキーをユーザーが参照すると、トラバーサルは終了しますKeyErrorを上げると、Pyramidはそれを404 HTTP応答に変換します。

より複雑なアプリケーションには、さまざまなタイプのリソースがあり、それぞれのタイプに対して異なるビュー呼び出し可能性が定義されており、各タイプごとに複数のビューさえあります。

参考

技術的な詳細については、doc: `traversal`を参照してください。

*なぜ*あなたがトラバーサルを使うかもしれないかについては、:doc: `muchadoabouttraversal`を参照してください。