(機械翻訳) Pyramid はじめに¶
:app: `Pyramid`はPython Webアプリケーション*フレームワークです。 Webアプリケーションを簡単に作成できるように設計されています。オープンソースです。
:app: `Pyramid`はこれらの設計原理と技術原則に従います:
- シンプリシティ
- :app: `Pyramid`は使いやすいように設計されています。あなたがすべてを理解していなくても、始めることができます。あなたがもっとやる準備ができたら、:app: `Pyramid`があなたのためにあります。
- ミニマリズム
- すぐに使える:app: `Pyramid`は、URLをコード、セキュリティ、および静的なアセット(JavaScriptやCSSなどのファイル)にマッピングするという、ほぼすべてのWebアプリケーションに必要な主要ツールのみを提供します。その他のツールは、テンプレート作成、データベース統合などを提供します。しかし、:app: `Pyramid`では、あなたが食べるものだけを支払うことができます。
- ドキュメンテーション
- :app: `Pyramid`は、包括的かつ最新の文書化に取り組んでいます。
- 速度
- :app: `Pyramid`は著しく高速になるように設計されています。
- 信頼性
- :app: `Pyramid`は控えめに開発され、徹底的にテストされています。私たちのモットーは: "テストされていなければ、それは壊れています"。
- 開放性
- Pythonと同様に、:app: Pyramid`ソフトウェアは、 `許容オープンソースライセンス<http://repoze.org/license.html> `_。
なぜピラミッド?¶
Webフレームワークでいっぱいの世界では、なぜあなたが選ぶべきですか?app: Pyramid ?
現代¶
:app: Pyramid`はPython 3と完全に互換性があります:今日:app: Pyramid`アプリケーションを開発すると、あなたが好きな言語の最新の機能を使用できるようになります。今後も、最新の将来展望のフレームワークに取り組んでいきます。
テスト済み¶
テストされていないコードは設計によって壊れています。 :app: Pyramid`コミュニティは強力なテストカルチャーを持っており、私たちの枠組みはそれを反映しています。 app: `Pyramid`のすべてのリリースでは、100%のステートメントカバレッジ(`カバレッジ<http://coverage.readthedocs.io/en/latest/> `_ ')と95%の決定/条件カバレッジ。 (計器によって測定される<http://instrumental.readthedocs.io/en/latest/intro.html> `_)これは Travis 'を使って自動的にテストされます<https://travis-ci.org/Pylons/pyramid> `_と`ジェンキンス<http://jenkins.pylonsproject.org/job/pyramid/> `GitHubリポジトリへのコミットのたびにサポートされているバージョンのPython上で動作します。 `公式ピラミッドアドオン<https://trypyramid.com/resources-extending-pyramid.html> `_同様の試験基準に守られている。
app: `Pyramid`ではまだバグが見つかっていますが、確かなテスト体制のプロジェクトに取り組んでいるうちに、それらの数が少なくなっています。
文書化された¶
:app: `Pyramid`のドキュメントは包括的です。私たちは、私たちの物語のドキュメンテーションを新人に完全かつ親しみやすいものにするよう努力しています。我々はまた:ref: `Pyramid Community Cookbook <cookbook:pyramid-cookbook>あなたが直面するかもしれない共通のシナリオを示すレシピの私たちの文書の改善の形での貢献は常に高く評価されています。そして、私たちは常に、公式のチュートリアル<html_tutorials> `_コミュニティ保守チュートリアルへの新しい貢献<tutorials:pyramid-tutorials> `_。
サポートされる¶
app: `Pyramid`を使うとすぐに助けを受けることができます。 app: `Pyramid`の質問には答えられないという私たちの目標です。 IRC、Pylonsディスカッションメーリングリスト、StackOverflowで質問するかどうかは、合理的に迅速な対応が取れる可能性があります。
:app: `Pyramid`は新入生のための歓迎され、友好的な空間です。 "サポートトロール"またはサポートチャネルで仲間のユーザーを嫌う人を容認するものではありません。私たちはそれを明るく、新しいユーザーフレンドリーに保ちます。
参考
#pyramid IRCチャンネル<https://webchat.freenode.net/?channels=pyramid> `_、私たちの pylons-discussメーリングリスト<https://groups.google.com/forum/#!forum/pylons-discuss> _、: `ref:`のサポートと開発 `
ピラミッドをユニークなものにする理由¶
Web開発には多くのツールがあります。誰かが使いたいと思うもの:app: Pyramid?何を作る:app: `Pyramid`は一意?
:app: `Pyramid`を使うと、たくさんのことを知らなくても非常に小さなアプリケーションを書くことができます。もう少し学ぶことで、非常に大きなアプリケーションも作成できます。 :app: `Pyramid`は、あなたがすぐに生産的になることを可能にし、あなたと共に成長します。あなたのアプリケーションが小さいときにあなたを後押しすることはなく、あなたのアプリケーションが大きくなったときにあなたの道には入りません。他のアプリケーションフレームワークは、「小さなアプリケーション」をサポートするカテゴリと「大きなアプリケーション」を設計するカテゴリの2つの重複しないカテゴリに分類されます。
私たちはあなたがこの選択をしなければならないと信じていません。あなたのアプリケーションがどれくらい大きくなるかは分かりません。小さなアプリケーションを別のフレームワークで書き直す必要はありません。うまく設計されたフレームワークは、両方でうまくいくはずです。 :app: `Pyramid`はそのようなフレームワークです。
:app: `Pyramid`は、PythonのWebフレームワーク内でユニークな一連の機能を提供します。 app: `Pyramid`は、宴会全体の費用を支払う必要なしに、完全に文書化された、1つの場所に、そして*アラカルト*を提供します。
単一ファイルアプリケーションを構築する¶
完全に1つのPythonファイルに存在する:app: `Pyramid`アプリケーションを書くことができます。そのようなアプリケーションは、すべてが1つの場所にあるので、理解しやすいです。 Pythonのパッケージについて多くのことを知る必要がないので、簡単にデプロイできます。 :app: `Pyramid`は、いわゆる* microframeworks *ができることはほとんど同じようにできます。
from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from pyramid.response import Response
def hello_world(request):
return Response('Hello %(name)s!' % request.matchdict)
if __name__ == '__main__':
with Configurator() as config:
config.add_route('hello', '/hello/{name}')
config.add_view(hello_world, route_name='hello')
app = config.make_wsgi_app()
server = make_server('0.0.0.0', 8080, app)
server.serve_forever()
参考
参照:ref: `firstapp_chapter`も参照してください。
デコレータでアプリケーションを設定する¶
:app: `Pyramid`はあなたのコードのすぐ隣にあなたの設定を保つことを可能にします。そうすれば、設定を見るためにファイルを切り替える必要はありません。例えば:
from pyramid.view import view_config
from pyramid.response import Response
@view_config(route_name='fred')
def fred_view(request):
return Response('fred')
ただし、:app: `Pyramid`設定デコレータを使用してもコードは変更されません。拡張、テスト、または再利用は容易なままです。あたかもデコレータが存在しないかのようにコードをテストすることができます。いくつかのデコレータを無視するようにフレームワークに指示することができます。あなたは完全にデコレータをスキップして、あなたの設定を書くために命令的なスタイルを使うことさえできます。
参考
参照:ref: `mapping_views_using_a_decorator_section`を参照してください。
アプリケーションのURLを生成する¶
動的Webアプリケーションでは、表示している内容に応じて変更できるURLが生成されます。 :app: `Pyramid`は柔軟で、一貫性があり、使いやすいツールを提供します。これらのツールを使用してアプリケーションを作成すると、Webページのリンクを壊すことなく、設定を変更できます。
参考
参照:ref: `generate_route_urls`を参照してください。
静的資産を提供する¶
Webアプリケーションでは、JavaScript、CSS、画像などのいわゆる静的資産が必要になることがあります。 :app: `Pyramid`は、この種のファイルを扱うための柔軟なツールを提供します。 app: `Pyramid`から直接配信することも、外部のサーバやCDN(コンテンツ配信ネットワーク)でホストすることもできます。どちらの方法でも、:app: `Pyramid`はURLを生成するのに役立ちますので、コードを変更せずにファイルの場所を変更できます。
参考
参照:ref: `static_assets_section`を参照してください。
インタラクティブに開発する¶
:app: Pyramid`は、テンプレートファイルやコードに加えた変更を自動的に検出することができるので、あなたの変更はすぐにブラウザで利用できます。普通の ` print() ``呼び出しを使ってデバッグできます。これはコンソールに表示されます。
:app: `Pyramid`にはデバッグツールバーがあり、ブラウザでアプリケーションがどのように動作しているかについての情報を見ることができます。構成、インストールされたパッケージ、SQLクエリ、ロギングステートメントなどを参照してください。
アプリケーションにエラーが発生した場合、インタラクティブなデバッガを使用すると、ブラウザから何か起きたことを知ることができます。
:app: Pyramid`デバッグツールバーを使うには、:app: Pyramid`:term: `cookiecutter`を使ってプロジェクトをビルドします。
参考
参照:ref: `debug_toolbar`を参照してください。
電源でデバッグする¶
事態がうまくいかないときは、:app: `Pyramid`は、問題を解決する強力な方法を提供します。
役に立つ情報をコンソールに表示するには:app: Pyramid`を設定することができます。 ` debug_notfound``の設定は、一致していないURLに関する情報を表示します。 `` debug_authorization``の設定は、あなたが今試みたことをなぜ許可されていないのかについての有用なメッセージを提供します。
:app: Pyramid`には、あなたの設定を確認するためのコマンドラインツールもあります。 ` proutes``と `` pviews``を使ってURLがアプリケーションコードにどのように接続されているかを調べることができます。
参考
参照:ref: debug_authorization_section、:ref:` command_line_chapter`、:doc: `../ pscripts / index`も参照してください。
アプリケーションを拡張する¶
:app: `Pyramid`アドオンは、フレームワークの核心を有用な能力で拡張します。あなたのお気に入りのテンプレート言語、SQLとNoSQLのデータベース、認証サービスなどに利用できるアドオンがあります。
サポートされている:app: `Pyramid`アドオンは、フレームワーク自体と同じ厳しい基準で保持されています。完全にテストされ、十分に文書化されていることがわかります。
参考
https://trypyramid.com/resources-extending-pyramid.htmlも参照してください。
あなたの意見を書いてください。¶
任意のフレームワークの基本的なタスクは、URLをコードにマップすることです。 In:app: Pyramid、そのコードは:term:` view callable`と呼ばれます。表示可能な呼び出しは、関数、クラスメソッド、または呼び出し可能なクラスインスタンスでもあります。ユースケースに最も適した方法を自由に選択できます。あなたの選択にかかわらず、:app: `Pyramid`はそれらを同じように扱います。ペナルティなしでいつでもあなたの心を変えることができます。さまざまなアプローチの間に人為的な違いはありません。
ここでは関数として定義されたビュー呼び出し可能関数を示します:
1 2 3 4 5 6 | from pyramid.response import Response
from pyramid.view import view_config
@view_config(route_name='aview')
def aview(request):
return Response('one')
|
代わりにクラスのメソッドとして定義されたいくつかのビューを次に示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | from pyramid.response import Response
from pyramid.view import view_config
class AView(object):
def __init__(self, request):
self.request = request
@view_config(route_name='view_one')
def view_one(self):
return Response('one')
@view_config(route_name='view_two')
def view_two(self):
return Response('two')
|
参考
参照:ref: `view_config_placement`を参照してください。
*あなたの*静的資産を見つける¶
多くのWebフレームワークでは、アプリケーションが必要とする静的資産は、グローバルに共有される場所の静的ディレクトリ*に保持されます。他のものは、テンプレートディレクトリの順序付けされたセットのようなルックアップスキームを使用します。これらのアプローチのどちらも、カスタマイズには問題があります。
:app: Pyramid`は別のアプローチをとっています。静的資産は、* asset specification *を使用して検索されます。文字列には、Pythonパッケージ名とファイルまたはディレクトリ名の両方に参照が含まれます。たとえば、 ` MyPackage:static / index.html``などです。これらの仕様は、テンプレート、JavaScript、CSS、翻訳ファイル、およびその他のパッケージにバインドされた静的リソースに使用されます。アセット仕様を使うことで、:app: `Pyramid`は競合を心配することなく他のパッケージでアプリケーションを簡単に拡張できます。
あなたが使用している別の:app: `Pyramid`パッケージがあなたがカスタマイズする必要のある資産を提供するとどうなりますか?たぶん、そのページテンプレートがより良いHTMLを必要とするか、あるいはいくつかのCSSを更新したいと思うかもしれません。アセット仕様を使用すると、単純なラッパーを使用して他のパッケージからアセットをオーバーライドできます。
例::ref: asset_specifications`と:ref: overriding_assets_section`です。
*あなたの*テンプレートを使用する¶
In:app: Pyramid、` Response``を作成する仕事は:term: renderer`に属します。どのテンプレートシステム(Mako、Chameleon、Jinja2)もレンダラになります。実際、これらのシステムのすべてにパッケージが存在します。しかし、別のものを使用する場合は、構造化されたAPIが存在し、お気に入りのテンプレートシステムを使用してレンダラーを作成することができます。フレームワークが必要とするものではなく、あなたが理解しているテンプレートシステム*を使うことができます。
さらに:app: `Pyramid`では、単一のテンプレートシステムだけを使用するわけではありません。同じプロジェクトでも、複数のテンプレートシステムを使用できます。
例::ref: `templates_used_directly`です。
テスト可能なビューを作成する¶
ビューを呼び出し可能にして:term: renderer`を使うと、" webby " Response``オブジェクトを返す必要がなくなります。代わりに、あなたのビューは単純なPython辞書を返すことができます。 :app: `Pyramid`は、あなたのために、その辞書の情報を `Response``にレンダリングします。その結果、結果を評価するためにHTMLを解析する必要がないため、ビューはより簡単にテストされます。 :app: `Pyramid`は、機能テストを使用するのではなく、ビューの単体テストを書くことを簡単にします。
例えば、典型的なWebフレームワークは `` render_to_response``呼び出しから `` Response``オブジェクトを返すかもしれません:
1 2 3 4 5 | from pyramid.renderers import render_to_response
def myview(request):
return render_to_response('myapp:templates/mytemplate.pt', {'a':1},
request=request)
|
あなたはapp: `Pyramid`でこれを行うことができますが、Python辞書を返すこともできます:
1 2 3 4 5 | from pyramid.view import view_config
@view_config(renderer='myapp:templates/mytemplate.pt')
def myview(request):
return {'a':1}
|
レンダラーを使用するようにビューを設定することで、app: Pyramid`に {'a':1} `辞書と指定されたテンプレートを使用してあなたの代わりに応答を表示します。
上記の `` renderer = ``として渡される文字列は:term: `asset specification`です。アセットの仕様は、app: `Pyramid`で広く使用されています。彼らはより信頼性の高いカスタマイズを可能にします。詳細は、:ref: `intro_asset_specs`を参照してください。
例::ref: `renderers_chapter`です。
イベントを使用してアクションを調整する¶
Webアプリケーションを記述する際には、要求のライフサイクルの特定の時点でコードを実行することが重要な場合があります。 In:app: `Pyramid`では、* subscribers と events *を使ってこれを実現できます。
たとえば、アプリケーションが新しい要求を処理するたびに実行する必要があるジョブがあるとします。 :app: Pyramid`はリクエスト処理ライフサイクルのこの時点で `NewRequest``イベントを送出します。明確な宣言スタイルを使用して、コードをサブスクライバとしてこのイベントに登録することができます。
from pyramid.events import NewRequest
from pyramid.events import subscriber
@subscriber(NewRequest)
def my_job(event):
do_something(event.request)
:app: Pyramid のイベントシステムも拡張できます。必要な場合は、あなた自身のイベントを作成し、app: Pyramid のイベントシステムを使用して送信することができます。それで、あなたのアプリケーションを使って作業している人なら誰でもあなたのイベントを購読して、あなたのコードとあなたのコードを調整することができます。
例::ref: events_chapter`と:ref: event_types`です。
国際的なアプリケーションを構築する¶
:app: `Pyramid`は、ローカリゼーション、多元化、ソースファイルやテンプレートからのメッセージカタログの作成という、国際化関連の機能を核にしています。 :app: `Pyramid`は、翻訳ドメインを使用して複数のメッセージカタログを可能にします。他のドメインの他の翻訳と矛盾することなく、独自の翻訳を持つシステムを作成することができます。
例::ref: `i18n_chapter`です。
効率的なアプリケーションを構築する¶
:app: `Pyramid`は、遅いまたは高価なビューの結果を簡単にキャッシュする*方法を提供します。ビューの設定で、ビューをキャッシュするように指定することができます。
@view_config(http_cache=3600) # 60 minutes
def myview(request):
# ...
:app: Pyramid`は自動的に適切な Cache-Control``と Expires``ヘッダを作成したレスポンスに追加します。
詳細は、:meth: 〜pyramid.config.Configurator.add_view`メソッドの `http_cache``ドキュメントを参照してください。
高速アプリケーションの構築¶
:app: `Pyramid`コアは高速です。スピードを追求して設計されています。あなたが仕事を遂行するためにそれを求めるとき、それは絶対に必要なだけの仕事をします。アプリケーションからスピードが必要な場合は、:app: `Pyramid`が最適です。
例:https://blog.curiasolutions.com/pages/the-great-web-framework-shootout.html
セッションデータを保存する¶
:app: `Pyramid`には、HTTPセッションの組み込みサポートがあるので、リクエスト間で特定のユーザーとデータを関連付けることができます。他の多くのフレームワークもセッションをサポートしています。しかし、:app: `Pyramid`では、独自のカスタムセッションシステムをプラグインすることができます。システムが文書化されたインターフェイスに準拠している限り、提供されたシステムの代わりにドロップすることができます。
現在、正確にこれを行うサードパーティのRedisセッションシステム用のバインディングパッケージがあります。しかし、特殊なニーズがある場合(多分、セッションデータをMongoDBに保存したい場合)、そうすることができます。アプリケーションコードを変更することなく、実装を切り替えることさえできます。
例::ref: sessions_chapter
恵みの問題を扱う¶
間違いが起こります。問題が発生する。誰もバグのないコードを書く人はいません。 :app: `Pyramid`はあなたのコードが遭遇する例外を処理する方法を提供します。 An:term: `例外ビュー 'は、アプリケーションによって処理されずに特定の例外タイプが発生したときに自動的に呼び出される特殊なビューです。
たとえば、:exc: `Exception`例外タイプの例外ビューを登録すると、* all *例外を捕捉して、かなり"うーん、これは恥ずかしい "というページが表示されます。または、特定のアプリケーション固有の例外のみの例外ビューを登録することもできます。ファイルが見つからない場合や、ユーザーが何かを実行する権限を持っていない場合に使用できます。前者の場合は、 "Not Found"ページを表示することができます。後者の場合、ログインフォームを表示することがあります。
例::ref: exception_views。
Pylonsプロジェクトとは何ですか?¶
:app: Pyramid`は、Pylonsプロジェクトで公開されているソフトウェアのコレクションのメンバーです。 Pylonsソフトウェアは、寄稿者のルーズニットコミュニティによって書かれています。 `Pylons Projectウェブサイト<https://pylonsproject.org> `app: Pyramid`はPylonsプロジェクトに関連しています。
:app: `Pyramid`とその他のWebフレームワーク¶
:app: Pyramid`の前身(名前:mod: repoze.bfg`)の最初のリリースは2008年の7月に行われました。2010年の終わりに、mod: repoze 'という名前を変更しました。 bfg:app: ピラミッド。その年の11月にapp: `Pyramid`としてPylonsプロジェクトに統合されました。
:app:Pyramidは、term: Zope、:term:` Pylons`(バージョン1.0)、 term: Django`からインスピレーションを受けています。結果として、:app: `Pyramid`はそれぞれからいくつかの概念と特徴を借用し、それらをユニークなWebフレームワークに結合します。
term: Zope、:app:` Pyramid`アプリケーションは簡単に拡張できます。フレームワークの制約内で作業する場合は、元のアプリケーションコードを変更することなく、再利用、変更、拡張が可能なアプリケーションを作成できます。 :app: Pyramid`は、term: traversal`とZopeの宣言型セキュリティという概念も継承しています。
term: Pylons`バージョン1.0と同様::app: Pyramid`はほとんどポリシーから解放されています。どのデータベースやテンプレートシステムを使用すべきかについては何の主張もしていません。特定のアプリケーションのニーズに合ったサードパーティのコンポーネントを自由に使用できます。 :app: Pyramid`はPylonsからterm: URL dispatch`へのアプローチも継承しています。
term: Django`と同様::app: Pyramid`は広範なドキュメントを評価します。さらに、:term: view`のコンセプトは、app: Pyramid`によってDjangoのように使われます。
他のPython Webフレームワークは、 `model-view-controllerという名前のWebフレームワークのクラスのメンバーとして自分自身を宣伝します<https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller> `_フレームワーク。 app: `Pyramid`の作者は、MVCパターンがウェブによく合うとは考えていません。しかし、この抽象化がうまくいくとすれば、:app: `Pyramid`も一般にこのクラスに適合します。