(機械翻訳) アプリケーション構成¶
ほとんどの人は、アプリケーションの動作に影響を与える設定として、すでに "構成"を理解しています。例えば、アプリケーションの起動時に"configuration "として解析された `` .ini``ファイルの値を考えるのは簡単です。しかし、あなたが合理的にオープンであれば、設定として*コード*を考えるのは簡単です。 Pyramidは他のほとんどのWebアプリケーションプラットフォームと同様に、* framework *であるため、(あなたが呼び出すためのコードである*ライブラリ*とは対照的に)あなたが書くコードを呼び出します。あなたが書いたアプリケーションコードをapp: `Pyramid`に差し込む行為は、このドキュメント内では" configuration "とも呼ばれます。あなたのアプリケーションを構成するコードを呼び出すために:app: `Pyramid`を設定しています。
参考
Pyramidアプリケーションの `` .ini``ファイルについては、:ref: `startup_chapter`の章を参照してください。
app: `Pyramid`アプリケーション::term:`必須の設定 `と:term:`宣言的な設定 'の二つの方法があります。どちらも以下で説明します。
指示的な構成¶
"命令的な設定"というのは、Pythonの文が次々に行う設定を意味します。ここでは、最も簡単なものの1つがapp: `Pyramid`アプリケーションです。
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__':
with Configurator() as config:
config.add_view(hello_world)
app = config.make_wsgi_app()
server = make_server('0.0.0.0', 8080, app)
server.serve_forever()
|
このアプリケーションが何をしているのかについてはまだ話しません。設定文は、 :__name__ == '__main __': スタンザの下で、:term: Configurator`オブジェクト(例えば、 `` config.add_view ) ``)。これらのステートメントは順番に実行され、順番に実行されるため、条件を含むPythonの完全な機能をこの設定モードで使用できます。
宣言的な構成¶
多くの場合、単一のアプリケーションのコードが多くのファイルに存在することがあるので、すべての設定を命令コードで行うのは苦しいことがあります。構成が1か所に集約されている場合は、少なくとも2つのファイルを一度に開いて「大きな画像」を表示する必要があります。構成を表すファイルと、そのファイルによって参照される実装オブジェクトを含むファイルです。構成。これを避けるために、:app: Pyramid`は:宣言自体によって参照されるコードに非常に近い:term: 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')
|
構成デコレーションの存在だけでは、構成登録は実行されません。 a:app: Pyramid`アプリケーションの設定に影響を与える前に、アプリケーションコード内の設定デコレーションをa:term: scan`と呼ばれるプロセスを通して見つける必要があります。
たとえば、上記のコード例の:class: pyramid.view.view_config`デコレータは、 hello``関数に属性を追加し、後でそれを見つけるために:term: scan`で利用可能にします。
:meth: pyramid.config.Configurator.scan`メソッドが呼び出されると、term: module`または term: package`のterm: `scan`が発生し、装飾のサブパッケージが発生します。パッケージとそのサブパッケージの構成宣言のためのものです。例えば:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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__':
with Configurator() as config:
config.scan()
app = config.make_wsgi_app()
server = make_server('0.0.0.0', 8080, app)
server.serve_forever()
|
スキャン機構は、パッケージまたはモジュール内の各モジュールおよびサブパッケージを再帰的にインポートし、モジュール内で定義されたオブジェクトに付加された特別な属性を探します。これらの特別な属性は、通常、:term: `decorator`を使用してコードに付加されます。たとえば、:class: `〜pyramid.view.view_config`デコレータは、関数またはインスタンスメソッドにアタッチすることができます。
スキャンが呼び出され、:term: configuration decoration`がスキャナによって検出されると、あなたの代わりに:term: Configurator`への一連の呼び出しが行われます。これらの呼び出しは、構成中のコードの近くには存在しない必須の構成ステートメントを追加する必要性を置き換えます。
term: configuration decoration`とa:term: scan`の呼び出しは、総称してterm: `declarative configuration`と呼ばれます。
上記の例では、スキャナは:class: 〜pyramid.view.view_config`の引数を:meth: pyramid.config.Configurator.add_view`メソッドの呼び出しに変換して効果的に行います:
config.add_view(hello)