(機械翻訳)Pyramid 1.4の新機能¶
この記事では、app: Pyramid`バージョン1.4の新機能を、app: Pyramid` 1.3と比較して説明します。また、app: Pyramid 1.4に追加された2つのバージョンと廃止予定との間の後方互換性も文書化されています。また、ソフトウェア依存の変更や著しいドキュメントの追加もあります。
主な機能の追加¶
Pyramid 1.4の主な機能の追加は以下のとおりです。
第三者の述語¶
meth: pyramid.config.Configurator.add_view_predicate、:meth:` pyramid.config.Configurator.add_route_predicate`および:meth:を介して、ビュー作成者が使用するサードパーティのカスタムビュー、ルートおよびサブスクライバ述語を追加できるようになりました。 pyramid.config.Configurator.add_subscriber_predicate。たとえば、これを行う:
config.add_view_predicate('abc', my.package.ABCPredicate)
ビュー作成者は、その述部を構成したアプリケーションでこれを行うことができます。
@view_config(abc=1)
同様の機能が:meth: pyramid.config.Configurator.add_route`と:meth: pyramid.config.Configurator.add_subscriber`に存在します。詳細は、ref: `registration_thirdparty_predicates`を参照してください。
簡単なカスタムJSONシリアライズ¶
- ビューは、オブジェクトのクラスに対して `` __json__``メソッドを定義することで、JSONレンダラによってJSONにシリアライズされるカスタムオブジェクトを返すようになりました。このメソッドは、 `` json.dumps``(int、リスト、辞書、文字列など)によってネイティブにシリアライズ可能な値を返さなければなりません。詳細はref: json_serializing_custom_objects`を参照してください。 JSONレンダラは、返されたオブジェクトに ` __json__``メソッドを追加できない場合に備えて、未知のオブジェクトをJSONシリアライズに変換するカスタムタイプアダプタの定義も可能にしました。
部分マコとカメレオンのテンプレートレンダリング¶
- Makoレンダラでは、アセット仕様のdef名の使用がサポートされるようになりました。 defの名前がアセット仕様にある場合、システムはテンプレート全体をレンダリングする代わりに、テンプレート内のdefという名前のテンプレートをレンダリングします。 defを指定するアセット仕様の例は、 `` package:path / to / template#defname.mako``です。これはテンプレート全体をレンダリングするのではなく、 `` template.mako``テンプレートの中で `` defname``という名前のdefをレンダリングします。ビューから ``( 'defname'、{}) ``の形式でタプルを返す古い方法は、下位互換性のためにサポートされています。
- Chameleon ZPTレンダラはアセット仕様でマクロ名の使用をサポートするようになりました。アセット仕様にマクロ名がある場合、システムは `` define-macro``としてリストされたマクロをレンダリングし、テンプレート全体をレンダリングする代わりに結果を返します。資産仕様の例: `` package:path / to / template#macroname.pt``。これにより、テンプレート全体ではなく、 `` template.pt``テンプレート内に `` macroname``として定義されたマクロがレンダリングされます。
マイナー機能追加¶
:class: pyramid.authentication.AuthTktAuthenticationPolicy`が、 `sha512``のような新しいハッシュアルゴリズムをサポートするように更新されました。既存のアプリケーションでは、可能であれば、デフォルトのmd5ハッシュよりもセキュリティを強化するために、更新を考慮する必要があります。
:meth: pyramid.config.Configurator.add_directive`は、 __name__``と __doc__``属性を持たない `__call__``を実装している部分的オブジェクトやオブジェクトのような任意の呼び出し可能変数を受け付けるようになりました。 https://github.com/Pylons/pyramid/issues/621およびhttps://github.com/Pylons/pyramid/pull/647を参照してください。
このリリースから、 `` request_method``のビュー/ルート述語は、 `` GET``を使うときに `` HEAD``が暗示されていることを暗示します。例えば、 `` @view_config(request_method = 'GET') ``を使うことは `` @view_config(request_method =( 'GET'、 'HEAD')) ``を使うのと同じです。 @view_config(request_method =( 'GET'、 'POST') ``は、 `` @view_config(request_method =( 'GET'、 'HEAD'、 'POST') ``を使うのと同じです。はボディを省略したGETの変種で、WebObはHEADが使用されたときに空のボディを返す特別なサポートを持っています。
:meth: `pyramid.config.Configurator.add_request_method`は任意の呼び出し可能な要求オブジェクトの拡張をサポートするために導入されました。このメソッドは、メソッドとプロパティをサポートすることによって、現在はドキュメント廃止予定の:meth: `pyramid.config.Configurator.set_request_property`を拡張しています。また、このメソッドは:meth: `〜pyramid.config.Configurator.set_request_property`よりも要求構築時に実行されるコードを少なくします。
静的ビューマシンはclass: pyramid.httpexceptions.HTTPNotFound`と:class: pyramid.httpexceptions.HTTPMovedPermanently`例外を返すのではなく、Not Found View(および他の例外ビュー)によって捕捉されるようになりました。
述部の不一致例外がある場合(述部が機能しないためにビューが特定の要求に一致しない場合に表示されます)、例外には一致しなかった述部のテキスト記述が含まれるようになりました。
Configuratorに:meth: pyramid.config.Configurator.add_permission`指示メソッドが追加されました。この指令は、ピラミッドのイントロスペクションシステムにイントロスペクト可能な自立型パーミッションを登録します。 Pyramidの上に構築されたフレームワークは、 ` permissions``のイントロスペクション可能なカテゴリデータを使用して、実行中のシステムでサポートされているパーミッションの包括的なリストを構築することができます。このメソッドが追加される前に、パーミッションは:meth: pyramid.config.Configurator.add_view`コールに名前を付ける副作用として、このイントロスペクション可能なカテゴリにすでに登録されていました。このメソッドは、パーミッションをアレンジできるようにするだけです関連するビューとともに名前を付けることなく、 ` permissions``のイントロスペクション可能なカテゴリに入れます。 `` add_permission``の使用例を次に示します:
config = Configurator() config.add_permission('view')
:func: pyramid.session.UnencryptedCookieSessionFactoryConfig`関数は、セッションがマーシャリングされる方法に影響を与えるために使用される signed_serialize``と `signed_deserialize``フックを受け入れるようになりました(デフォルトでHMAC + pickleで行われます)。
:class: pyramid.testing.DummyRequest`は、 set_property``のような `pyramid.util.InstancePropertyMixin``クラスによって提供されるメソッドをサポートするようになりました。
:meth: pyramid.config.Configurator.add_request_method`または:meth: pyramid.config.Configurator.set_request_property`を介して追加されたリクエストプロパティとメソッドは、現在トゥイーンで利用可能です。
:meth: pyramid.config.Configurator.add_request_method`または:meth: pyramid.config.Configurator.set_request_property`を介して追加されたプロパティとメソッドは、func: `pyramid.paster.bootstrap`から返されたリクエストオブジェクトで利用可能になりました。 。
func: `pyramid.paster.bootstrap`は、提供されたリクエストにコンテキストがまだ設定されていない場合、ルートオブジェクトになりました。
:class: `pyramid.decorator.reify`はAPIになり、APIドキュメントに追加されました。
:func: pyramid.testing.testConfig`コンテキストマネージャを追加しました。例えば、 with testing.testConfig(...): `などのテストでコンフィギュレータを生成するために使用できます。
新しい:func: `pyramid.session.check_csrf_token`便利API関数が追加されました。
`` check_csrf``ビュー述語が追加されました。たとえば、 `` config.add_view(someview、check_csrf = True) ``を実行することができます。述語がチェックされると、 `` request.params``の `` csrf_token``の値がリクエストのセッションのcsrfトークンと一致すると、ビューは実行を許可されます。そうしないと、実行が許可されません。
`` alchemy``足場に `` Base.metadata.bind = engine``を追加して、必要に応じて定義されたテーブルが機能するようにします。
足場の `` .ini``ファイルに置かれたドキュメンテーションセクションへの参照に関するコメント。
`` request_param``のview / route述部に複数の値をシーケンスとして指定できるようにします。以前は、単一の文字列値のみが許可されていました。 https://github.com/Pylons/pyramid/pull/705を参照してください。
class: `pyramid.authentication.BasicAuthAuthenticationPolicy`にHTTP基本認証ポリシーを追加しました。
:meth: `pyramid.config.Configurator.testing_securitypolicy`メソッドは、作成したポリシーオブジェクトを返します。
:meth: pyramid.config.Configurator.testing_securitypolicy`で作成されたDummySecurityPolicyは、 forget``メソッドが呼び出されたときに、ポリシーに 忘れられた 値( `True``値)を設定するようになりました。
:meth: pyramid.config.Configurator.testing_securitypolicy`によって作成されたDummySecurityPolicyは、ポリシーに 記憶された 値を設定します。これは remember``時に呼び出される `principal``引数の値です。 `メソッドが呼び出されます。
新しい `` physical_path``ビュー述語。指定する場合、この値は、この述部が真と一致するためにトラバーサルによって検出されたコンテキストの物理的なトラバーサルパスを表す文字列またはタプルでなければなりません。例: `` physical_path = '/' ``または `` physical_path = '/ a / b / c``または `` physical_path =(' '、' a '、' b '、' c ') `` 。これは、あるオブジェクトがトラバースされているときに常にビューを表示したいときに便利ですが、どのようなオブジェクトであるかを確かめることができないので、 `` context``述語を使うことはできません。
`` effective_principals``ルートとビュー述語を追加しました。
:func: pyramid.security.authenticated_userid`または:func: pyramid.security.effective_principals`によって返されたプリンシパルのリストの1つであるユーザIDが、 `` system `` mod: pyramid.authentication``が使用されているときに.Everyone``または `System.Authenticated``を呼び出します。これらの2つの文字列は、Pyramidによる内部使用のために予約されており、有効なユーザーIDとして受け入れられなくなります。
:class: pyramid.view.view_config`に `_depth``引数を許可します。これは、view_configによく似たカスタムデコレータを提供したい他のソフトウェアによるデコレータのコンポジションの再利用を制限します。
デコレータのiterableを:meth: `pyramid.config.Configurator.add_view`に渡すことを許可します。これにより、デコレータを自分で組み合わせなくても、ビューを複数のデコレータでラップすることができます。
:func: pyramid.security.view_execution_permitted`はビューが見つからない場合に True`を返すために使用されます。存在しないビューが実行可能であることを宣言するのは意味をなさないので、この場合は:exc: `TypeError`例外が発生します。 https://github.com/Pylons/pyramid/issues/299を参照してください。
a:class: `pyramid.response.Response`オブジェクトがビューから返されることが予想される小さなマイクロスピードの拡張です。ビューによって返されるオブジェクトのクラスがこのクラスである場合、いくつかのコードはショートカットです。 func: `pyramid.request.Request.is_response`に対して同様のマイクロ最適化が行われました。
`` p *
コマンド( `` pserve
、 `` pshell``、 `` pviews``など)のすべてで可変引数を `` a = 1b = 2``の形式で使用できるようにします。 `` pshell etc / development.ini http_port = 8080`のように、パラメータ化された `.ini`ファイルで値を入力することができます。人々が加入者呼び出し可能変数への未使用引数を無視し、イベント加入者と加入者述語の間の関係を正規化するために、加入者と加入者述語の両方が購読していても単一の `` event``引数だけを受け入れることができるようになりました。複数のインタフェースを含む通知の場合
後方の非互換性¶
- ピラミッドルータは、 `` bfg.routes.route``または `` bfg.routes.matchdict``の値をリクエストのWSGI環境辞書に追加しなくなりました。これらの値は `` repoze.bfg`` 1.0で文書廃止されました(事実上7つのマイナーリリース前)。コードがこれらの値に依存している場合は、代わりに `` request.matched_route``と `` request.matchdict``を使用してください。
- environ辞書を `` pyramid.traversal.ResourceTreeTraverser .__ call__``(別名 `` ModelGraphTraverser .__ call__``)に直接渡すことはもはや不可能です。代わりに、要求オブジェクトを渡す必要があります。リクエストの代わりに環境を渡すと、Pyramid 1.1以降の廃止予定の警告が生成されました。
- `` webob.request.LegacyRequest``を要求ファクトリとして使用すると、Pyramidは正しく動作しなくなります。 LegacyRequestクラスのインスタンスには、文字列を返す `` request.path_info``があります。このPyramidのリリースでは、 `` request.path_info``が無条件にUnicodeになると仮定しています。
- `` get_renderer``、 `` get_template``、 `` render_template``、および `` render_template_to_response``という名前の `` pyramid.chameleon_zpt``と `` pyramid.chameleon_text``の関数は削除されました。これらはPyramid 1.0以降のインポート時に廃止予定の警告を出しました。 func: pyramid.renderers.get_renderer、` pyramid.renderers.get_renderer()。implementation() 、:func: pyramid.renderers.render`または:func: `pyramid.renderers.render_to_response`をそれぞれ使用します。これらの機能の代わりに。
- `` pyramid.configuration``モジュールが削除されました。 Pyramid 1.0以降、非推奨となっていたため、使用時に非推奨警告が表示されました。 mod: `pyramid.config`を代わりに使用してください。
- `` pyramid.paster.PyramidTemplate`` APIが削除されました。ピラミッド1.1以来廃止され、輸入に関する警告が出されました。あなたのコードがこれに依存している場合は、代わりに:class: `pyramid.scaffolds.PyramidTemplate`をインポートするようにコードを調整してください。
- `` pyramid.settings.get_settings() `` APIが削除されました。 Pyramid 1.0以降、廃止予定の警告が表示されていました。あなたのコードがこのAPIに依存している場合、代わりに `` pyramid.threadlocal.get_current_registry()。settings``を使うか、リクエストから利用可能なレジストリの `` settings``属性を使います( `` request.registry.settings``) 。
- `` pyramid.testing``モジュールのこれらのAPIは削除されました。彼らはPyramid 1.0以降、廃止予定の警告を印刷しています:
- `` registerDummySecurityPolicy``では、代わりに:meth: `pyramid.config.Configurator.testing_securitypolicy`を使います。
- `` registerResources``(別名 `` registerModels``)では、代わりに:meth: `pyramid.config.Configurator.testing_resources`を使用してください。
- `` registerEventListener``、代わりに:meth: `pyramid.config.Configurator.testing_add_subscriber`を使用してください。
- `` registerTemplateRenderer``(別名 `` registerDummyRenderer``)では、代わりに:meth: `pyramid.config.Configurator.testing_add_renderer`を使います。
- `` registerView``、代わりに:meth: `pyramid.config.Configurator.add_view`を使用してください。
- `` registerUtility``では、代わりに:meth: `pyramid.config.Configurator.registry.registerUtility`を使います。
- `` registerAdapter``では、代わりに:meth: `pyramid.config.Configurator.registry.registerAdapter`を使用してください。
- `` registerSubscriber``では、代わりに:meth: `pyramid.config.Configurator.add_subscriber`を使用してください。
- `` registerRoute``では、代わりに:meth: `pyramid.config.Configurator.add_route`を使用してください。
- `` registerSettings``では、代わりに:meth: `pyramid.config.Configurator.add_settings`を使います。
- Pyramid 1.3以前では、終了したコールバックが実行される前にビューから返されたResponseオブジェクトの `` __call__``メソッドが呼び出されました。このリリースから、Responseオブジェクトの `` __call__``メソッドは、終了したコールバックが実行された後に呼び出されます。これは:meth: `pyramid.request.Request.invoke_subrequest`機能をサポートしています。
廃止¶
- :meth: `pyramid.config.Configurator.set_request_property`ディレクティブはドキュメンテーションで非難されています。メソッドは使用可能ですが、もっと機能的です:meth: `pyramid.config.Configurator.add_request_method`を代わりに使用する必要があります(すべて同じ機能を持ちますが、メソッドでリクエストオブジェクトを拡張することもできます)。
- :class: pyramid.authentication.AuthTktAuthenticationPolicy`は、アプリケーションが明示的に `hashalg``引数を渡さずにポリシーを使用している場合、非推奨警告を出します。これは、デフォルトでは理論的には衝突攻撃の対象と見なされる"md5 "であるためです。 "md5 "が本当に必要な場合は、警告を取り除くために明示的に指定する必要があります。
ドキュメントの機能拡張¶
- ナレーション文書に:ref: `upgrading_chapter`の章を追加しました。 Pyramid APIの廃止と削除に対処する方法と、テストの実行中およびサーバーの実行中にPyramidで生成された廃止予定の警告を表示する方法について説明します。
- 物語のドキュメンテーションにa:ref: `subrequest_chapter`章を追加しました。
- すべてのチュートリアルでは:class: pyramid.authentication.AuthTktAuthenticationPolicy`は sha512``を `hashalg``引数として明示的に渡します。
- 多くのクリーンアップと物語とAPIのドキュメントの改良。
依存関係の変更¶
- PyramidにはWebOb 1.2b3 +が必要です(以前のPyramidリリースは1.2dev +のみに依存していました)。これは、 `` request.path_info``をテキストとして返すWebObのバージョンを確実に取得するためです。