(機械翻訳)Pyramid 1.0の新機能¶
この記事では、以前のPyramidバージョン1.0の新機能について説明します。mod: repoze.bfg 1.3。また、Pyramid 1.0に追加された2つのバージョンと廃止予定の間の後方互換性や、ソフトウェア依存の変更や著しいドキュメントの追加についても説明しています。
主な機能の追加¶
Pyramid 1.0の主な機能の追加は次のとおりです。
- Pylonsプロジェクトとの新しい名前とブランディング協会。
- BFG変換スクリプト
- 足場の改良
- 用語の変更
- プラットフォームの互換性とサポートの向上
- Makoテンプレート言語の直接組み込みサポート。
- セッションの組み込みサポート。
- 更新されたURLディスパッチ機能
- 必須の拡張性の向上
- 外部化されたZCML
- レンダリング時のグローバルテンプレート変数のサポートの向上
- マッパーを表示
- テストシステムの改善
- 認証サポートの改善
- ドキュメントの改善
新しい名前とブランディング¶
`` repoze.bfg``の名前がPyramidに変更されました。このプロジェクトは現在、新しいエンティティ「The Pylons Project」のサブプロジェクトです。 Pylonsプロジェクトは、Webフレームワーク関連の技術のコレクションのプロジェクト名です。 PyramidはPylonsプロジェクトの最初のパッケージでした。コレクションの他のパッケージは、Pylons 1ユーザーやex-Zopeユーザーにとって便利なサポートパッケージなど、時間の経過とともに追加されています。 Pyramidはmod: repoze.bfg`と:term: Pylons`バージョン1の後継バージョンです。
Pyramidのコードベースは、ほとんどがmod: `repoze.bfg`から得られ、Pylons 1との互換性のためにいくつかの変更が加えられています。
Pyramidは新しいパッケージ名を持っているためmod: repoze.bfg`と技術的に後方互換性がありませんので、既存のものに何もしないと、 repoze.bfg``モジュールからの古いインポートは失敗します:mod: repoze .bfgアプリケーション。しかし、Pyramidで既存のBFGアプリケーションを使用するために多くを行う必要はありません。ほとんどのインポートステートメントとZCML宣言を変更するオートメーションがあります。アップグレード手順については、http://docs.pylonsproject.org/projects/pyramid/current/tutorials/bfg/index.htmlを参照してください。
Pylons 1ユーザーはPyramidを使用するにはもっと多くの作業をする必要があります。PyramidはPylonsと"DNA "を共有しないからです。 Pylons 1ユーザーがPyramidに移行するのを容易にするために、時間の経過と共にドキュメントとアップグレードコードが開発されることが期待されています。
:mod: `repoze.bfg`バージョン1.3が最後のメジャーリリースになります。重大なバグ修正のためにマイナーなアップデートが行われます。 Pylonsバージョン1ではメンテナンスリリースも引き続き表示されます。
Repozeプロジェクトは引き続き存在します。 Repozeは、Zopeの技術をWSGIにもたらすという本来の焦点を取り戻すことができます。 :mod: `repoze.bfg`の人気がWebフレームワークとしてこの目標を妨げていました。
私たちはまず、Pylonsプロジェクトが示した協力の精神と開発コミュニティの合併によって人々が引き付けられることを願っています。少し主権を犠牲にして一緒に働くことは謙虚さを必要とします。反対に、プロジェクトの分岐や分岐は、オープンソースの世界ではもっと一般的です。私たちは"トップティア"のPython Webフレームワークのスペースに限られた量の酸素しか存在しないと感じています。私たちはPythonコミュニティに過度の混雑によるサービスを提供しません。 :mod: `repoze.bfg`と哲学的に類似したPylonsコミュニティをマージすることで、両方とも拡張された視聴者と将来の成功のチャンスが増えます。
BFG変換スクリプト¶
`` bfg2pyramid``変換スクリプトは、既存の:mod: `repoze.bfg`アプリケーションをPyramidに自動的に変換します。このプロセスは"BFGアプリケーションをピラミッドに変換する"で説明されています。
足場の改良¶
足場には、より良いCSSとグラフィックがあります。
すべてのスカフォールドによって生成された `` development.ini``は、デフォルトでWebErrorインタラクティブ例外デバッガを使用するように設定されました。
すべての足場は正規化されています:WSGIアプリケーションを返す関数を表すためにそれぞれが `` main``という名前を使用しています。それぞれは現在、development.iniスタイルとほぼ同じ形をしています。
すべての既存スキャフォールドは、ZCML構成ではなく、 "必須"構成( `` starter``、 `` routesalchemy``、 `` alchemy``、 `` zodb``)を使用します。
`` pyramid_zodb``、 `` routesalchemy``、 `` pyramid_alchemy``足場は、 `` repoze.tm2``トランザクションマネージャを `` development.ini``で設定するとき、デフォルトの ``コミット拒否 'フックを使用するようになりました。 。これにより、応答ステータスコードが400または500の範囲内にあるときにトランザクションがコミットされるのを防止します。
参考
http://docs.repoze.org/tm2/#using-a-commit-vetoも参照してください。
用語の変更¶
以前は"モデル"として知られていたピラミッドの概念は、現在 "リソース"として知られています。その結果、次のAPIの名前が変更されました。以前の名前の下位互換性シムはすべての場合にそのまま残っています:
pyramid.url.model_url -> pyramid.url.resource_url pyramid.traversal.find_model -> pyramid.url.find_resource pyramid.traversal.model_path -> pyramid.traversal.resource_path pyramid.traversal.model_path_tuple -> pyramid.traversal.resource_path_tuple pyramid.traversal.ModelGraphTraverser -> pyramid.traversal.ResourceTreeTraverser pyramid.config.Configurator.testing_models -> pyramid.config.Configurator.testing_resources pyramid.testing.registerModels -> pyramid.testing.registerResources pyramid.testing.DummyModel -> pyramid.testing.DummyResource
以前は"モデル"を参照していたすべてのドキュメントは、"リソース"を参照しています。
`` starter``足場には、 `` models.py``モジュールの代わりに `` resources.py``モジュールが追加されました。
さまざまなAPIの位置引数名が `` model``から `` resource``に変更されました。
以前は"リソース"として知られていたピラミッドの概念は、現在 "資産"として知られています。その結果、次のAPIの変更が行われました。必要に応じて下位互換性のシムが残されています:
pyramid.config.Configurator.absolute_resource_spec -> pyramid.config.Configurator.absolute_asset_spec pyramid.config.Configurator.override_resource -> pyramid.config.Configurator.override_asset
以前は `` pyramid.resource``として知られていた(非API)モジュールは `` pyramid.asset``と呼ばれています。
以前は"リソース指定"を参照していたすべてのドキュメントが"資産指定"を参照しています。
以前は `` BFG_RELOAD_RESOURCES``(envvar)または `` reload_resources``(configファイル)として知られていた設定は、それぞれ `` PYRAMID_RELOAD_ASSETS``と `` reload_assets``として知られています。
より良いプラットフォームの互換性とサポート¶
PyramidのテストスイートをJythonとPyPyの両方に渡しました。ただし、Chameleonはどちらでも動作しないため、これらのプラットフォームでMakoまたはJinja2テンプレートを使用する必要があります。
セッション¶
Pyramidには組み込みのセッションサポートがあります:ref: `sessions_chapter`に文書化されています。セッションの実装はプラグイン可能です。また、フラッシュメッセージングとクロスサイトスクリプティング防止機能も提供します。
`` request.session``を使うと、a:term: `session factory`が設定されていれば、(辞書のような)セッションオブジェクトを返します。
Configuratorコンストラクタの新しい引数があります: `` session_factory``とコンフィグレータの新しいメソッドが存在します::meth: pyramid.config.Configurator.set_session_factory。
マコ¶
カメレオンのテンプレートに加えて、Pyramidでは、term: `Mako`テンプレートの組み込みサポートも提供しています。詳細は、:ref: `available_template_system_bindings`を参照してください。
URL派遣¶
- URL Dispatchでは、置き換えマーカーを `` / ``の直後ではなく、パターン内のどこにでも配置できるようになりました。
- URL Dispatchは `` {marker} ``の代わりにルートパターンの置換マーカーを示すために `` {marker} ``という形式を使用するようになりました。古いコロンスタイルのマーカー構文は、下位互換性のために受け入れられます。新しいフォーマットでは、デフォルトの `` [^ /] + ``の代わりにそのマーカ位置の正規表現を使うことができます。例えば、 `` {marker:d +} ``はマーカを数字。
- 新しいAPI:func: `pyramid.url.current_route_url`を追加しました。これは、"現在の"ルート(もしあれば)とそのmatchdict値に基づいてURLを計算します。
- ルーティングテーブルの要約を表示する `` paster proute``コマンドを追加しました。物語のドキュメンテーション:ref: `displaying_application_routes`を参照してください。
- matchdictと述語を含むマッチしたルートを記録する `` debug_routematch``設定( `` .ini``ファイルで設定可能)を追加しました。
- a:func: pyramid.url.route_path APIを追加して、人が相対URLを生成できるようにします。 `` route_path``を呼び出すことは空の文字列に等しい引数 `` _app_url``を使って:func: `pyramid.url.route_url`を呼び出すことと同じです。
- a:meth: pyramid.request.Request.route_path APIを追加してください。これはfunc: `pyramid.url.route_url`を呼び出す要求の簡易メソッドです。
- class vars `` matchdict``と `` matched_route``を:class: pyramid.request.Request`に追加しました。リクエスト中にルートがマッチしなかった場合、それぞれは ` None``にセットされます。
ZCML外部化¶
- Configuratorの `` load_zcml``メソッドがPyramidコアから削除されました。 ZCMLの読み込みは:term: pyramid_zcml`パッケージの機能となりました。これはPyPIからダウンロードできます。パッケージのドキュメントは、http://docs.pylonsproject.org/projects/pyramid_zcml/en/latest/から入手できます。これは、このメソッドを再利用するために ` main``ブロックに構成文を追加する方法を説明しています。また、 `` setup.py``ファイルへの `` pyramid_zcml``配布に `` install_requires``依存関係を追加する必要があります。
- "Declarative Configuration "の説明の章は削除されました( `` pyramid_zcml``パッケージに移動されました)。
- 物語の章の中のZCMLへの参照は、削除されたり、 "pyramid_zcml"の場所にリダイレクトされました。
- `` starter_zcml``のペースト足場は `` pyramid_zcml``パッケージに移動しました。
指令2相構成¶
アプリケーションの拡張性をサポートするために、:app: Pyramid:term:` Configurator`はデフォルトで設定の競合を検出し、他のパッケージやモジュールからの設定を必須にすることができます。また、デフォルトでは、2つの別々のフェーズで構成を実行します。これにより、状況によっては相対的な構成ステートメントの順序を無視することができます。詳細は、:ref: `advconfig_narr`を参照してください。
:meth: `pyramid.config.Configurator.add_directive`は、フレームワークエクステンダがコンフィグレータにメソッドを追加することを可能にします。エクステンダはメソッドを追加するだけでコンフィグレータのサブクラス化を避けることができます。詳細は:ref: `add_directive`を参照してください。
`` config.begin() ``と `` config.end() ``を使って周囲のアプリケーション構成を行う必要はなくなりました。すべての足場が変更され、これらの機能は呼び出されなくなりました。
レンダリング時のグローバルテンプレート変数のサポートの強化¶
レンダラーが呼び出される前に、class: pyramid.interfaces.IBeforeRender`という名前の新しいイベントタイプがイベントとして送信されるようになりました。アプリケーションはレンダラに渡される前にレンダラグローバルセットをイントロスペクションして変更するために、 ` IBeforeRender``イベントタイプにサブスクライブすることができます。イベントオブジェクトiselfには、この目的のために使用できる辞書のようなインターフェースがあります。例えば::
from repoze.events import subscriber
from pyramid.interfaces import IRendererGlobalsEvent
@subscriber(IRendererGlobalsEvent)
def add_global(event):
event['mykey'] = 'foo'
マッパーを表示¶
"view mapper "サブシステムが抽出されました。これにより、フレームワークエクステンダは、ビュー呼び出し可能オブジェクトがどのように構築され呼び出されるかを制御できます。この機能は"民間人"には役に立ちませんが、拡張機能の作者にのみ有効です。詳細はref: `using_a_view_mapper`を参照してください。
テストサポートの改善¶
:func: pyramid.testing.setUp`と:func: pyramid.testing.tearDown` APIは廃止されました。これで、コンフィグレータの直接作成に代わって、テストコンフィグレーションのための標準的なセットアップとティアダウンAPIになりました。これは、今後のConfiguratorの廃止を防ぐファサードを提供するように設計された変更です。
認証サポートの改善¶
- :class: pyramid.interfaces.IAuthenticationPolicy`インターフェースは `unauthenticated_userid``メソッドを指定するようになりました。このメソッドは、オブジェクトキャッシングをサポートしない永続ストレージを使用しているユーザーと、要求属性として"ユーザーオブジェクト"を作成するユーザーが必要とする重要な最適化をサポートします。
- 新しいAPIが `` unauthenticated_userid``という名前の:mod: pyramid.security`モジュールに追加されました。このAPI関数は、有効なセキュリティポリシーの ` unauthenticated_userid``メソッドを呼び出します。
- class:class: `pyramid.authentication.AuthTktCookieHelper`はAPIになりました。このクラスは、認証Cookie設定の仕組みを助けるために、サードパーティの認証ポリシー開発者が使用できます。
- :class: pyramid.authentication.AuthTktAuthenticationPolicy`は:func: pyramid.security.remember`を介して `` tokens``パラメータを受け付けるようになりました。値は一連の文字列でなければなりません。トークンはauth_tkt "tokens "フィールドに置かれ、auth_tktクッキーに返されます。
- class: pyramid.authentication.AuthTktAuthenticationPolicy`に wild_domain``引数を追加しました。デフォルトは True``です。 ` False``に設定されている場合、wilcardドメインを持つクッキーを設定するポリシーの機能は無効になります。
ドキュメントの改善¶
- 親友のCasey Duncanと優れたテクニカルライターが、Pyramidのドキュメントセット全体を専門的に編集する賜物を与えてくれました。ドキュメンテーションの欠陥は開発チームのものであり、すべての改善は彼のものです。
- "リソースの場所とビューの参照"の章は、Rob Millerの"Much Ado About Traversal "(元々http://blog.nonsequitarian.org/2010/much-ado-about-htmlで公開されています)トラバーサル/)。
- 多くのユーザーがBen Bangert、Blaise Laflamme、Rob Miller、Mike Orr、Carlos de la Guardia、Paul Everitt、Tres Seaver、John Shipman、Marius Gedminas、Chris Rossi、Joachim Krebs、Xavier Spriet、Reed O ' Brien、William Chambers、Charlie Choiniere、Jamaludin Ahmadが挙げられる。
マイナー機能追加¶
- 設定者に渡された `` settings``辞書は、設定コードの `` config.registry.settings``とビューコードの `` request.registry.settings``として利用可能になりました。
- :meth: pyramid.config.Configurator.add_view`は、 `decorator``キーワード引数を受け付けるようになりました。この引数は、レジストリに追加される前に呼び出し可能なビューを装飾する呼び出し可能です。
- ビューの登録中に提供された静的レンダラが、以前に登録されたレンダラの名前でなければならない `` override_renderer``という名前のリクエスト属性を介してリクエスト時にオーバーライドされるようにします。既存のレンダリングビューを使って"遍在する" RPCを提供するのに便利です。
- リソースが `` __resource_url__``メソッドを実装している場合は、:func: `pyramid.url.resource_url`関数を呼び出してURLを生成し、デフォルトロジックをオーバーライドした結果として呼び出されます。詳細は、ref: `generate_the_url_of_a_resource`を参照してください。
- `` registry``という名前はデフォルトで `` pshell``環境で利用できるようになりました。これはアプリケーションレジストリオブジェクトです。
- exc: NotImplementedError`をキャッチし、 django.utils``から `simplejson``をインポートすることで、Google App Engineにjsonのサポートを追加しました。
- :mod: pyramid.httpexceptions`モジュールを追加しました。これは `webob.exc``モジュールのファサードです。
- 新しいクラス::class: pyramid.response.Response。これは `` webob.Response``の純粋なファサードです(古いコードはこのファサードを使用するために変更する必要はなく、ほとんどが虚栄心や文書生成目的のためです)。
- この要求には、Pylonsユーザーのための新しい属性、 `` tmpl_context``が追加されました。
- class: pyramid.request.Request:` model_url`、` route_url`、` `static_url``の新しいAPIメソッドです。これらはmod: `pyramid.url`のそれぞれの関数の単純なパススルーです。
後方の非互換性¶
a:class: pyramid.exceptions.Forbidden`エラーが発生すると、そのステータスコードは 403 Forbidden``になります。 mod: `repoze.bfg`との下位互換性の目的では以前は 401 Unauthorized``でした。この変更により、Pyramidのユーザには、mod: `repoze.who`がデフォルトで 401 Unauthorized`を傍受し、 403 Forbidden`は通過させることができます。これらのデプロイメントでは、mod: `repoze.who`も 403 Forbidden``に反応するように設定する必要があります。これを行うには、次のような ` challenge_decider``をrepoze.who
import zope.interface from repoze.who.interfaces import IChallengeDecider def challenge_decider(environ, status, headers): return status.startswith('403') or status.startswith('401') zope.interface.directlyProvides(challenge_decider, IChallengeDecider)
`` paster bfgshell``コマンドは `` paster pshell``として知られています。
名前 `` repoze.bfg.debug``を持つ名前付きユーティリティとして登録された `` IDebugLogger``オブジェクトはなくなりました。
これらの非難されたAPIは削除されました: `` pyramid.testing.registerViewPermission``、 `` pyramid.testing.registerRoutesMapper``、 `` pyramid.request.get_request``、 `` pyramid.security.Unauthorized``、
ピラミッド.view.view_execution_permitted
、 `` pyramid.view.NotFound``すべての組み込みのVenusianデコレータ(例えば `` subscriber``と `` view_config`` / `` bfg_view``)のVenusian "category "は `` bfg``の代わりに `` pyramid``になりました。
`` pyramid.renderers.rendered_response``関数が削除されました。代わりにfunc: `pyramid.renderers.render_to_response`を使用してください。
レンダラーファクトリは、絶対リソース指定または絶対パスではなくレンダラー情報オブジェクト*を受け入れるようになりました。オブジェクトには、 `` name``(レンダラー=
値)、 ``パッケージ ``(レンダラー構成ステートメントが見つかったときの現在のパッケージ)、 ``型 ``:レンダラータイプ、 `` registry
:現在のレジストリ、 `` settings``:デプロイメント設定辞書です。 Pyramidに移植されなければならないサードパーティの `` repoze.bfg``レンダラ実装は、これを考慮する必要があります。この変更は主に、より柔軟なMakoテンプレートレンダリングをサポートするために行われました。例外が発生したときのWSGI環境でのキー `` repoze.bfg.message``の存在は廃止されました。代わりに、この環境値に依存するコードは、要求の `` exception``属性(例えば、 `` request.exception [0] ``)を使用してメッセージを取得する必要があります。
キャッシュのための国際化の間に要求に保持された `` bfg_localizer``と `` bfg_locale_name``の値は決してAPIではありませんでした。これらはそれぞれ `` localizer``と `` locale_name``に変更されました。
:class: pyramid.authentication.AuthTktAuthenticationPolicy`のデフォルトの cookie_name``値はデフォルトで auth_tkt``(デフォルトは repoze.bfg.auth_tkt`)になりました。
:func: pyramid.testing.zcml_configure APIが削除されました。それは:mod: repoze.bfg 1.2a1以降に削除されたものとして広告されていましたが、実際には存在していませんでした。
接頭辞 `` BFG_``を使用していたすべての環境変数は、 `` PYRAMID_``の接頭辞になりました(例えば `` BFG_DEBUG_NOTFOUND``は `` PYRAMID_DEBUG_NOTFOUND``です)
:class: pyramid.interfaces.IAuthenticationPolicy`インターフェースは、ポリシー実装が `unauthenticated_userid``メソッドを実装しなければならないように指定するので、サードパーティのカスタム認証ポリシーはすべてこのメソッドを実装する必要があります。ただし、func: `pyramid.security.unauthenticated_userid`というグローバル関数が呼び出されたときにのみ呼び出されるため、呼び出さない場合は問題に気付かないでしょう。
デプロイメント設定(Pyramidの `` main``関数に渡される `` ** settings``内の)内の `` configure_zcml``の設定は意味を持ちません。
`` make_app``関数は:mod: pyramid.router`モジュールから削除されました。これは ` pyramid_zcml``パッケージ内での生活を続けています。これにより、:mod: `pyramid.router`モジュールにはAPI関数がありません。
廃止と行動の相違¶
- :class: pyramid.configuration.Configurator`は廃止予定です。 :class: `pyramid.config.Configurator`を使って、コンストラクタ autocommit = True`を渡してください。 :class: pyramid.configuration.Configurator`エイリアスは、すべてのアプリケーションがそれを使用するので、長い間存続しますが、そのインポートは非推奨警告を発行します。 :class: `pyramid.config.Configurator`クラスは:class: pyramid.configuration.Configurator`クラスと同じAPIを持っています。これはデフォルトでは非自動コミット*コンフィグレータですが、置き換えられることを意味します。現在廃止された `` pyramid.configuration.Configurator``は、設定メソッドが呼び出されるたびに自動的にコミットします。 :mod: `pyramid.configuration`モジュールは残っていますが、非難されています。 mod: `pyramid.config`を代わりに使用してください。
- :func: pyramid.settings.get_settings APIは廃止予定です。代わりに、 `` pyramid.threadlocals.get_current_registry()。settings``を使用するか、リクエストから利用可能なレジストリの `` settings``属性( `` request.registry.settings``)を使用してください。
- 以前は `` pyramid.view.bfg_view``として知られていたデコレータは、ドキュメントと足場のclass: `pyramid.view.view_config`として最も正式に知られています。
- `` registry。{get | query}ユーティリティ(ISettings) ``を介して `` settings``オブジェクトを取得することは廃止されました。代わりに `` settings``オブジェクトを `` registry.settings``属性で取得します。 `` setattr(registry、 'settings'、foo) ``が呼び出されたときに設定オブジェクトをISettingsユーティリティとして登録するために、レジストリオブジェクトに下位互換性のシムが追加されましたが、後のリリースで削除されます。
- func: pyramid.settings.get_settings`を介して settings``オブジェクトを取得するようになりました。代わりに、レジストリの ` settings``属性として取得します(func: pyramid.threadlocal.get_registry`または `request.registry``を介してレジストリを取得します)。
依存関係の変更¶
- Venusian> = 0.5(スキャン競合例外装飾用)に依存します。
ドキュメントの機能拡張¶
- a:mod: pyramid.httpexceptions APIドキュメントの章を追加しました。
- a:mod: pyramid.session APIドキュメントの章を追加しました。
- :mod: `pyramid.response`モジュール用のAPIの章を追加しました。
- a:ref: `sessions_chapter`ナレーション文書の章を追加しました。
- 以前に `` webob.Response``を参照していたすべてのドキュメントはclass: `pyramid.response.Response`を代わりに使用しています。
- ドキュメントは、必須の構成を使用して、宣言的構成(ZCML)の説明を外部パッケージterm: `pyramid_zcml`に移動するように改訂されました。
- `` zodbsessions``チュートリアルの章を削除しました。これはまだ有用ですが、SessionFactory抽象化と競合しています。両方の方法でドキュメンテーションを維持することは気を散らすものです。
- テストの説明の章:ref: functional_tests`に `WebTest``機能テストの例を追加しました。
- 「リソース」の章では、リソース関連のAPIの呼び出し例を拡張しました。
- ディフェンスのドキュメントを作成するには、"ピラミッドはそれを行う方法の1つ以上を提供する"を追加します。
- (弱い)"CMFアプリケーションをPyramidに変換する"チュートリアルは、チュートリアルのセクションから削除されました。それはhttp://docs.pylonsproject.org/projects/pyramid_tutorials/dev/の `` pyramid_tutorials`` Githubリポジトリに移されました。
- "ZODOでZODBを使用する"と"repoze.catalogをピラミッド内でtutorialsの中からコアドキュメントとPyramidチュートリアルサイト(http://docs.pylonsproject.org/projects/pyramid_tutorials/dev/)に移動しました。
- `` registerDummySecurityPolicy``、 `` registerResources``、 `` registerModels``、 `` registerEventListener``、 `` registerTemplateRenderer``、 `` registerDummyRenderer``という非推奨の `` pyramid.testing`` APIのAPIドキュメントを削除しました。 registerView``、 `` registerUtility``、 `` registerAdapter``、 `` registerSubscriber``、 `` registerRoute``、および `` registerSettings``を返します。