これは、最も一般的な種類の route とビューです。
固定のコントローラーとアクション。
1 2 3 4 5 | # Pylons
map.connect("faq", "/help/faq", controller="help", action="faq")
class HelpController(Base):
def faq(self):
...
|
1 2 3 4 5 | # Pyramid
config.add_route("faq", "/help/faq")
@view_config(route_name="faq", renderer="...")
def faq(self): # In some arbitrary class.
...
|
.
固定のコントローラとアクション、加えて他のルーティング変数。
1 2 3 4 5 6 | # Pylons
map.connect("article", "/article/{id}", controller="foo",
action="article")
class FooController(Base):
def article(self, id):
...
|
1 2 3 4 5 | # Pyramid
config.add_route("article", "/article/{id}")
@view_config(route_name="article")
def article(self): # In some arbitrary class.
id = self.request.matchdict["id"]
|
.
可変のコントローラとアクション。
# Pylons
map.connect("/{controller}/{action}")
map.connect("/{controller/{action}/{id}")
# Pyramid
# Not possible.
Pyramid ではルーティング変数によってビュークラスを選択することは できません。
固定のコントローラ、可変のアクション。
# Pylons
map.connect("help", "/help/{action}", controller="help")
1 2 3 4 5 6 | # Pyramid
config.add_route("help", "/help/{action}")
@view_config(route_name="help", match_param="action=help", ...)
def help(self): # In some arbitrary class.
...
|
‘pyramid_handlers’ パッケージはこれとは別の選択肢を提供します。
他の Pyramid の例:
1 2 3 4 5 6 | # Home route.
config.add_route("home", "/")
# Multi-action route, excluding certain static URLs.
config.add_route("main", "/{action}",
path_info=r"/(?!favicon\.ico|robots\.txt|w3c)")
|
“pyramid_handlers” は、上記のケース #4 を扱うためのおそらくより便利な 方法 (ビューを指定する ‘action’ 変数を含んだ route) を提供するアドオン パッケージです。それはこのように作動します:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | # In the top-level __init__.py
from .handlers import Hello
def main(global_config, **settings):
...
config.include("pyramid_handlers")
config.add_handler("hello", "/hello/{action}", handler=Hello)
# In zzz/handlers.py
from pyramid_handlers import action
class Hello(object):
__autoexpose__ = None
def __init__(self, request):
self.request = request
@action
def index(self):
return Response('Hello world!')
@action(renderer="mytemplate.mak")
def bye(self):
return {}
|
add_handler メソッド (6行目) は、 route を登録し、次に Hello クラス を走査します。それは @action デコレータを持つすべてのメソッドを、 メソッド名をビュー述語として使用してビューとして登録します。その結果、 メソッド名が URL の ‘action’ 部分に現われた場合、 Pyramid はこのビュー を呼び出します。
__autoexpose__ クラス属性 (11行目) は正規表現にすることも可能です。 任意のメソッド名がそれと一致すれば、 @action デコレータがなくても ビューとして登録されます。デフォルトの自動 expose 正規表現は英文字から 始まるすべてのメソッドとマッチします。したがって、メソッドが自動的に expose されるのを避けるためには、それを None に設定しなければなりません。 もしそうしたければ、ベースクラスの中でこれをすることができます。
@action デコレータは config.scan() によって認識 されない ことに 注意してください。 @action デコレータは config.add_hander でのみ動作します。
“pyramid_handlers” に対するユーザの反応は様々です。一部のユーザはそれを 使っています。しかし、ほとんどのユーザはそれが「標準の Pyramid 」だから という理由で @view_config を使っています。
“pyramid_routehelper” は、 Pylons の map.resource のように動作する config.add_resource メソッドを提供します。それは、 RESTful なやり方 で (Atom publishing protocol に従って) リソースを一覧/表示/追加/修正/削 除する route 一式を加えます。詳細については、リンク先のソースコードの docstring を参照してください。
注: ここでの単語「リソース」はトラバーサルのリソースとは関係 ありません 。