アプリケーション設定¶
ほとんどの人は、既にアプリケーションの操作に影響を及ぼす設定項目として
「設定 (configuration)」 を理解しています。例えば、アプリケーションの
スタートアップ時に解析された .ini
ファイル中の値を「設定」と
考えることは簡単です。しかし、十分に広い心を持っていれば、容易に
コード もまた設定と見なすことができます。Pyramid は、他のほとんどの
ウェブアプリケーションプラットフォーム同様 フレームワーク なので、
あなたが書いたコードを呼び出します (これと対照的なのが ライブラリ で、
それは純粋にあなたが呼び出すために存在するコードです)。 Pyramid
に対してプラグインアプリケーションコードを書く行為も、この
ドキュメンテーション内では「設定」と呼ばれます; あなたはアプリケーション
を構成するコードを呼び出すように Pyramid を設定しています。
Pyramid アプリケーションを設定するために2つの方法があります: imperative configuration と declarative configuration です。 その両方が以下で説明されます。
命令型の設定¶
「命令型の設定」は、単に Python の文によって次々に行われた設定を意味します。 これは、命令型で設定された最も単純な Pyramid アプリケーションの1つです:
1 2 3 4 5 6 7 8 9 10 11 12 13 | from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from pyramid.response import Response
def hello_world(request):
return Response('Hello world!')
if __name__ == '__main__':
config = Configurator()
config.add_view(hello_world)
app = config.make_wsgi_app()
server = make_server('0.0.0.0', 8080, app)
server.serve_forever()
|
このアプリケーションが何を行うかに関しては、もうあまり詳しく説明しません。
「設定」文が if __name__ == '__main__':
断片の真下にあり、
Configurator オブジェクトのメソッド呼び出し
(例 config.add_view(...)
) の形で起こることだけに注目してください。
これらの文は次々と置かれ、順番に実行されます。したがって、この設定モード
では、条件式を含む Python の完全な力を使うことができます。
宣言型の設定¶
単一のアプリケーションのためのコードはしばしば多くのファイルに存在 するので、命令型のコードによってすべての設定を行うことは時々苦痛を伴います。 設定が一カ所に集中して集められていると、「全体像」を見るために少なくとも 同時に 2 つのファイルを開く必要があるでしょう: 設定を表わすファイルと、 設定によって参照されている実装オブジェクトを含むファイルです。これを 回避するために、 Pyramid では宣言自体によって参照されるコードの 非常に近くに configuration decoration 文を挿入することが可能です。 例えば:
1 2 3 4 5 6 | from pyramid.response import Response
from pyramid.view import view_config
@view_config(name='hello', request_method='GET')
def hello(request):
return Response('Hello')
|
設定デコレーションが単に存在するだけでは、設定登録は行なわれません。 Pyramid アプリケーションの設定が効果も持つ前に、アプリケーション コード内の設定デコレーションは scan として知られているプロセス を通じて見つけられなければなりません。
例えば、上記のコード例における pyramid.view.view_config
デコレータは、
scan が後でそれを見つけられるように hello
関数に属性を加えます。
module あるいは package およびそのサブパッケージの
デコレータに対する scan が、 pyramid.config.Configurator.scan()
メソッドが起動された時に起こります: scan は、パッケージおよびそのサブ
パッケージ中の設定宣言の検索を意味しています。例えば:
Starting A Scan
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from pyramid.response import Response
from pyramid.view import view_config
@view_config()
def hello(request):
return Response('Hello')
if __name__ == '__main__':
from pyramid.config import Configurator
config = Configurator()
config.scan()
app = config.make_wsgi_app()
server = make_server('0.0.0.0', 8080, app)
server.serve_forever()
|
scan 機構は、モジュール内に定義されたオブジェクトに取り付けられた
特殊属性を探して、パッケージまたはモジュールに含まれる各モジュールと
サブパッケージを再帰的にインポートします。これらの特殊属性は典型的に
decorator を使用してコードに取り付けられます。例えば
view_config
デコレータを関数またはインスタンス
メソッドに取り付けることができます。
一旦 scan が起動され、 configuration decoration がスキャナに よって見つかれば、 Configurator に対する一連の呼び出しが 自動的に行われます: これらの呼び出しは、設定対象のコードから離れた 場所に命令型の設定命令を追加する必要性を置き換えます。
configuration decoration と scan 起動の組み合わせは、 まとめて declarative configuration として知られています。
上記の例において、スキャナは実質的に view_config
に
対する引数を pyramid.config.Configurator.add_view()
メソッドの
呼び出しに変換します:
1 | config.add_view(hello)
|
まとめ¶
Pyramid アプリケーションを設定するために、宣言型と命令型という 2つの方法があります。どちらでも好きなモードを選ぶことができます; 両者は完全に等価です。このドキュメンテーション中の例では、両方のモードを 交互に使用します。