2012-03-12 12 views
2

私はPython CGIスクリプトとして書かれたほぼ完全なシンプルなWebアプリケーションを持っています。私はWSGIを使用するように変更したいと思いますが、実際にWSGIが何であるかを理解するのに役立つマニュアルは見つかりません(start_responseなどで繰り返し呼び出すだけですが、これらについてはあまり説明がないようですコールは実際に行う)。誰かがWSGIを使用する上で良い説明とハウツーを指摘できますか?初心者のWSGIガイドが必要です

編集:私はthis questionを見てきたことを追加する必要がありますが、答えはまだ(枠組みではなく)直接スクリプトでWSGIを使用する方法を教えてくださいしていないようです。

+0

私はちょうど[Armin Ronacherのこのガイド](http://lucumr.pocoo.org/2007/5/21/getting-started-with-wsgi/)を見つけましたが、これは私が探していたものです。他の人にもおすすめです。この質問をすることはできません、私は思う、そうするように要求する他の人。 – ShankarG

答えて

8

WSGIは、PEP 333(およびPython 3ではPEP3333)、a.k.a Web Server Gateway Interfaceです。 3つの部分から構成されていますが、興味のある部分はWSGIアプリケーションの記述方法です。そしてWSGI appは、2つの引数をとり、反復可能なオブジェクトを返す(またはジェネレータである)呼び出し可能なオブジェクトです。

# this is my_app module 
def app(environ, start_response): 
    # environ is dict-like object containing the WSGI environment 
    # refer to the PEP for details 

    # start_response is a callable that, well, starts the response 
    headers = [('Content-Type', 'text/plain; charset=utf-8')] 
    start_response('200 OK', headers) 

    return ["I'm a WSGI application.\n"] 

アプリケーションを実行するには、ゲートウェイであるWSGIの別の部分が必要です。標準ライブラリにはwsgirefパッケージがあります。これは、CGIゲートウェイが含まれています

#!/usr/bin/python 
# this is a CGI script that runs a WSGI application inside CGI handler 
from wsgiref.handlers import CGIHandler 
from my_app import app 
CGIHandler().run(app) 

そしてまた、開発のための簡単なHTTPサーバ:

from wsgiref.simple_server import make_server 
from my_app import app 
httpd = make_server('localhost', 8000, app) 
httpd.serve_forever() 

あなたが見ることができるように、WSGIはあなたが異なる環境でアプリケーションを再利用することができます - CGI、SCGI、FastCGIの、mod_wsgi、mod_pythonなどのように、実際に書き直す必要はありません。

WSGIの最後の部分はミドルウェアです。基本的には、さまざまなWSGIアプリケーションを組み合わせることができます。これは、サンドウィッチの一種を形成します。要求はトップ(ゲートウェイ)からボトム(通常はあなたのアプリケーション)に流れ、その間にいくつかの中間層があり、データベース接続プーリングやセッションのようなものを実装します。 wsgirefには、そのようなミドルウェアの1つ - wsgiref.validate.validatorが含まれています。このミドルウェアは、WSGI仕様の規則に準拠しているかどうかを確認します。

それは基本的にそれです。今、フレームワークを使いましょう。

+0

+1は、私がしたよりもはるかに詳細な地獄を提供しています。そして、「今、フレームワークを使いましょう」 ;) – Amber

+0

素敵な答えをありがとう、私はガイドを探していたが、私はここに答えをくれたと思った!今私は、アプリケーションのWSGIを作成し、**し**フレームワークを使用するつもりです。無駄な時間がたくさんありますが、私はそれほど古い学校です:) – ShankarG

+0

@ShankarG:複雑なアプリケーションでは扱いにくいことがあるため、ほとんどのフレームワークはWSGIレイヤを隠します。 –

0

WSGI仕様のPEP 333に直接アクセスしてみてください。

関連する問題