他の Pyramid 機能

シェル

Pyramid は、アプリケーションを対話型の Python プロンプトの中に preload するコマンドを持っています。これはデバッグまたは実験の役に立ちます。 そのコマンドは “pshell” で、 Pylons における “paster shell” の親戚です。

$ pshell development.ini
Python 2.6.5 (r265:79063, Apr 29 2010, 00:31:32)
[GCC 4.4.3] on linux2
Type "help" for more information.

Environment:
  app          The WSGI application.
  registry     Active Pyramid registry.
  request      Active request object.
  root         Root of the default resource tree.
  root_factory Default root factory used to create `root`.

>>>

それは Pylons ほど多くのグローバル変数を初期化しませんが、 apprequest は最も有用なものになるでしょう。

他のコマンド

利用可能な他のコマンド:

  • proutes: アプリケーションの route をリストする。 (Pylons の “paster routes” の親戚。)
  • pviews: アプリケーションのビューをリストする。
  • ptweens: アプリケーションの tween をリストする。
  • prequest: アプリケーションをロードして、指定された URL を処理して、 レスポンスボディを標準出力に表示する。

フォーム

Pyramid はフォームライブラリを含んでいません。 Pylons は、フォーム生成の WebHelpers と、バリデーションとエラーメッセージ用の FormEncode を 含んでいます。これらは Pyramid の下でも動きます。しかし、 Pylons の @validate デコレータに相当する内蔵の等価物はありません。代わりに、 私たちは “pyramid_simpleform” パッケージを推奨します。それは @validate をよりフレキシブルな構造に置き換えます。

Pyramid と共に使われる他のフォームライブラリがいくつかあります。 それらは Pyramid Cookbook 中の正規の Forms セクションで議論されます。

WebHelpers

WebHelpers は、 HTML タグビルダー、テキスト処理機能、数値フォーマットと 統計機能、およびテンプレートとビューに役立つその他の汎用的な機能を含む サードパーティパッケージです。それは Pylons の依存パッケージですが、 Pyramid においてはオプションです。

webhelpers.pylonslib サブパッケージは、 Pylons の特殊グローバル変数 に依存するので Pyramid では動作しません。 webhelpers.mimehelperwebhelpers.paginate には Pylons に特有の機能があり、これは 他のフレームワークの下では無効になります。 WebHelpers は Python 3 上で テストされていません。

WebHelpers の次のバージョンでは、現在の helpers の部分集合が Python 3 に移植されて、異なるディストリビューション (WebHelpers2) としてリリース されるでしょう。 Paginate と Feed Generator は、おそらく別のディストリ ビューションとして独立します。

イベント

イベントフレームワークは、リクエスト処理シーケンスに独自のコードを挿入 することができるフックを提供します (それは Apache モジュールの動作に 似ています)。イベントは、Pylons において ad-hoc に提供されていた、 もしくは全く提供されていなかったいくつかのカスタマイズを標準化します。 イベントを使用するためには、 pyramid.events の中のイベントタイプ (ApplicationCreated, ContextFound, NewResponse, BeforeRender) のうちの 1 つに対してコールバック関数を書いてください。 コールバックは、イベントタイプに特有の event 引数を受け取ります。 @subscriber または config.add_subscriber() でイベントを登録 することができます。 Akhet デモに例があります。

より詳細については、以下を見てください:

URL 生成

Pyramid には “pylons.url” と等価な URL ジェネレータは付属していません。 特定の種類の URL を生成するために、 Request オブジェクトの個別のメソッド が利用可能です。これらのうち、 route_url は route を名前によって生成する 通常のケースをカバーします:

request.route_url("route_name", variable1="value1")
request.route_path("route_name", variable1="value1")
request.route_url("search", _query={"q": "search term"}, _anchor="results")

すべての *_url と *_path メソッドの違いと同じく、 route_url は 絶対 URL を生成する一方で route_path は「スラッシュ」 URL (スキームや ホストが付かない) を生成します。 _query 引数は、クエリパラメータ (あるいは key-value ペアのシーケンス) の辞書です。 _anchor 引数は “#results” 断片と共に URL を生成します。他の特別なキーワード引数は、 _scheme, _host, _port および _app_url です。

URL をハードコーディングするのではなくこれらのメソッドを使用する利点は、 自動的にアプリケーションプレフィックスが追加されることです (アプリケーションがサブ URL にマウントされている場合、それは “/” 以外に なるかもしれません)。

さらに、追加の位置引数を渡すこともでき、それらはコンポーネントとして URL に追加されます。これは URL ディスパッチではあまり有用ではありません。 それはよりトラバーサル的なものです。

route が pregenerator と共に定義されれば、 URL が生成される前にそれが 位置およびキーワード引数と共に呼び出され、引数を修正することができます。

Akhet は URLGenerator クラスを持っています。 Akhet デモの中で示される ように、イベントサブスクライバを用いてそれを使用してテンプレートに url 変数を作ることができます。そうすると、このようなことが可能に なります:

1
2
3
4
5
6
url.route("route_name")          # Generate URL by route name.
url("route_name")                # The same.
url.app                          # The application's top-level URL.
url.current()                    # The current request URL. (Used to
                                 # link to the same URL with different
                                 # match variables or query params.)

さらに、それをカスタマイズしてこんなこともできます:

url.static("images/logo.png")
url.image("logo.png")            # Serve an image from the images dir.
url.deform("...")                # Static file in the Deform package.

“url” が長すぎると思えば、それを “u” と命名することさえできます!

ユーティリティスクリプト

Pyramid には、メンテナンスその他のためにユーティリティスクリプトを書く ためのドキュメント化された方法があります。 Writing a Script を参照し てください。

テスト

Pyramid は、ビューのためのユニットテストを書くことがより簡単です。

(XXX 比較の例が必要。)

国際化

Pyramid には国際化サポートがあります。現時点では、それは主として Mako で はなく Chameleon テンプレートに対してドキュメント化されています。

高レベルフレームワーク

Pyramid は、その上により高レベルのフレームワークを構築するための柔軟な 基礎を提供します。いくつかのものは既に書かれています。さらにアプリケーション scaffold と tar ボールがあります。

  • Kotti は、そのまま使うことも拡張することもできるコンテンツ管理システムです。
  • Ptah は Django と同数の機能を持つことを目標とするフレームワークです (しかし ponies も cowbell もありません)。 それには最小の CMS コンポーネント があります。
  • Khufu は Pyramid 用の scaffold およびユーティリティ一式です。
  • これまでに言及した Akhet デモ。それは、あなたがコードをコピーすることが できる tar ボールに入った動くアプリケーションです。

逆の極限では、 scaffold なしで Python 14 行で小さな Pyramid アプリケーション を作ることができます。 Pyramid マニュアルに例があります: Hello World 。 これは Pylons では不可能です – 少なくとも、それを激しく歪めない限りは。