単一のRailsではありません!
sm.orgからの引用。
HabréのWSGIのトピックは公開されていません。非識字の可能性を排除しようとします。私の意見では、関連する技術について話すのは興味深いことです。 同時に、PastesとPasteに触れます。 しかし、まず最初に。
WSGI
WSGI (Web Server Gateway Interface) -Pythonで書かれたWebサーバーとそこで実行されるWebアプリケーションの相互作用のためのインターフェイス。 WSGIはPython標準であり、 PEP 333で説明されています。 これは非常に若い技術です。 もともとPython Web Containerと呼ばれていたPhillip J. Ebyの発案
インターフェイスは、2003年12月7日にPython Web-SIGでPEPの候補として提出されました。 そして、2004年8月にその現代的な名前を得て、すばらしい航海に出ました。 この技術に関するいくつかの言葉。
現代のさまざまなプログラミング言語とWeb フレームワークは、間違いなく新しいプログラマーを驚かせるでしょう。 そして、より経験豊富な人は、ある言語で書かれたアプリケーションでさえ、非常に互換性がなく、コードを再利用できないことに驚いています。 あるサーバーから別のサーバーにプロジェクトを移動することは、しばしば大きな頭痛の種になります。 したがって、統一規格の出現は、技術開発における論理的なステップです。
WSGIは、 WebサーバーとWebアプリケーションとの間のインターフェース(言い換えれば、レイヤー) です 。 したがって、アプリケーション側ではWebサーバーのように見え、サーバー側ではアプリケーションのように見えます。 これは重要な概念です。 彼女は、WSGIで書かれたプロジェクトでは、Apacheのmod_pythonで実行されているか、他のどこかのFastCGIのように実行されているかどうかはまったく同じだと言います。 また、選択したバンドルでAPIや環境を学習することなく、アプリケーションを作成できます。
こんにちは世界!
実際には非常に美味しそうです(WSGI互換アプリケーションの例):
<b> def </ b>アプリ(environ、start_response): start_response(<span style = "color:#693"> '200 OK' </ span>、[(<< span style = "color:#693"> 'Content-Type' </ span>、<span style = " color:#693 "> 'text / plain' </ span>)]) return [<span style = "color:#693"> 'Hello World!\ n' </ span>]
この例は簡潔で示唆的なものです。
- WSGIアプリケーションは、2つの引数で呼び出すことができる呼び出し可能なオブジェクト(関数など)です。環境変数を模倣する辞書と、応答を開始する、つまりHTTPステータス(200 OK)とHTTPヘッダーを送信する呼び出し可能なオブジェクトです。
- environはCGI環境に非常に類似しており、WSGI固有の値(environ ['wsgi.input']にはPOSTメソッドによって送信されたデータを読み取るためのストリームが含まれます)とともに使い慣れた値(REQUEST_METHOD、PATH_INFO)が含まれます。
- アプリケーションは、応答本文、つまり、接着されてブラウザーに送信される文字列の配列を含むイテレーターを返します。
貼り付けが効く
3行のコードを追加して、アプリケーションの動作を今すぐ確認したいですか?
<b> if </ b> __name__ == <span style = "color:#693"> '__ main__' </ span>: <b>から</ b>貼り付け<b>インポート</ b> httpserver httpserver.serve(app、host = <span style = "color:#693"> '127.0.0.1' </ span>、port = <span style = "color:#693"> '8080' </ span>)
貼り付けは、メタフレーム、Webプログラマーと管理者の両方のためのコンポーネントとユーティリティのセットです。
管理者:
- 貼り付け用に作成されたWebアプリケーションをすばやく簡単にインストール、実行、および構成できます。 WSGI(およびSCGI、FCGI、AJP)を使用してWebサーバーと統合します。
- システム内のアプリケーションの保守、管理、インストールを簡単にします(システム全体)。
プログラマーに、次に貼り付け
- コマンドラインユーティリティと初期テンプレートを提供して、フレームワークでの作業を大幅に簡素化します。
- 開発サイクル全体を促進します:プロジェクトの開始、更新、テスト、展開、
- WSGIアプリケーションの開発を楽しく興味深いものにします。
- などなど 。
この場合、Pasteに組み込まれたHTTPサーバーを使用して、すべてがどのように機能するかを即座に示しました。 このサーバーは、フレームワークを使用して実際のアプリケーションを開発するプロセスでも使用されます。 ただし、これは完全に標準で必要なものであり、 Ruby on Railsでも使用されています 。
貼り付けには、 多くの便利なものも含まれています。 それらの存在と豊富さは、フレームワークとメタフレームの両方としてペーストについて話すことを可能にします。 プレフィックスメタは、フレームワークを作成するためのフレームワークであり、ギリシャ語のμετά(後、後ろ、間に)から来ていると言います。
コンセプト:アプリケーションスタック
WSGIに戻ります。 WSGIアプリケーション内でリクエストの前処理(たとえば、Cookie内のセッションIDを使用してデータベースからユーザーを復元する)を実行し、別のWSGIアプリケーションを呼び出して後者の結果を返すとどうなるでしょうか。 それはほとんど認証をサポートするための計画をするでしょう。 そして、最初のアプリケーションが2番目のアプリケーションを呼び出し、そのアクティビティの結果にXSL変換を適用する場合はどうでしょうか?
ここに別の重要な概念があります。 これらの例の最初のアプリケーションは、レイヤーまたはミドルウェアとして機能します。 そして、すべてのミドルウェアの全体がアプリケーションスタックを形成します。 したがって、コンポーネントを接続することさえできず、WSGIベース上で適切な順序で配置するだけの非常にモジュール式のシステムが得られます(上からアプリケーションを忘れることはありません)。
このようなシステムを使用すると、 SQLAlchemy- 「アプリケーション開発者にSQLのフルパワーと柔軟性を提供するPython SQLツールキットとオブジェクトリレーショナルマッパー」、 AuthKit-ユーザーを認証するための汎用で柔軟なフレームワークなどを接続できます。 そしてもちろん-例外をキャッチして「oops」ページと「oh-oh-oh」ページに変換するためのミドルウェア。 Pasteは、構成などの非Vebパーツのミドルウェアでのラッピングを奨励していると言わなければなりません。 シンプルで、明白で、無条件に柔軟なアプリケーション構造が判明しました。
すべて一緒に、そしてもっと何か-Pylons
したがって、WSGIは、Webサーバーと多層ミドルウェア構造との接続を提供します。 貼り付けは、テスト、例外のキャッチ、リクエストの内部リダイレクト、さらにはファイルアップロードインジケーター(アップロード進行状況モニター)といった一般的なタスクの解決に役立ちます。 上記のミドルウェアの例として、SQLを1行も使用せずにデータベースでの承認、認証、および作業を行いました。
ここで、 Routesを使用してリクエストのルーティングを追加しましょう。AJAXのサーバー側はWebHelpersです (両方のコンポーネントは完全にRoRに移植されています)。コントローラーの構造とPylonsの取得-Python用の高度なWSGI互換のWebフレームワークであり、Python、RoR、およびその他のフレームワークとプロジェクトのすべてを最大限に活用しています 。
公平性と批判の観点から、これらの技術は非常に新しいものであることに注意してください。たとえば、Pylonsはバージョン0.9.5に戻り、AuthKitは開発中であり、本番環境での使用は推奨されていません。 それでも、WSGIが有望であり、Pasteライブラリなどで満たされたWebフレームワークがほぼ完璧な(または標準的な)Webフレームワークであることを納得させることを願っています。 TurboGears 、 CherryPy 、 Djangoおよびその他のフレームワークでWSGIテクノロジーを適用できますが。
もちろん、少なくともいくつかの客観的な比較については、十分な経験はありませんが、PylonsとDjangoで同じアプリケーションを作成すると、Pylonsが本当に操縦していると結論付けることができます。
いくつかの使用
- WSGI 、 WSGI 。
- PythonでのWSGI調査-Linux Gazette#115
- PEP 333
- 貼り付け
- パイロン
- Python Webドキュメンテーションプロジェクト -Pylons、AuthKitなどによるwikiドキュメンテーションとクックブック
- ウィキペディア 、 ウィキペディア 、 Google
- マーク・リース:WSGI-ゲートウェイか接着剤か? (PDF)