(機械翻訳) こんにちはトラバーサルワールド¶
トラバーサルは、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応答に変換します。
より複雑なアプリケーションには、さまざまなタイプのリソースがあり、それぞれのタイプに対して異なるビュー呼び出し可能性が定義されており、各タイプごとに複数のビューさえあります。