WSGI は Web Server Gateway Interface の略で、(ほとんど) http://www.python.org/dev/peps/pep-0333/の PEP 333 で定義されています。
Web サーバーが Python アプリケーションと通信するための標準メカニズムを確立することは、Python コミュニティによる取り組みです。
理論的には、wsgi 準拠のサーバー (または既存の Web サーバーの拡張機能) は、wsgi 準拠のアプリケーションを読み込んで実行できるはずです。
werkzeugは、Apache+mod_wsgi などの準拠した WSGI サーバーで実行できる Web アプリケーション フレームワークです。また、開発に使用できる組み込みの開発サーバーも含まれています。
WSGI は最初は非常に混乱する可能性がありますが、実際には非常に単純です。WSGI 仕様では、Python アプリケーションで次のことを行う必要があります。
- という名前の callable を定義する
application
- 上記の callable は 2 つのパラメーターを受け入れる必要があります: (
environ
, start_response
)
environ
環境変数の辞書です
start_response
応答を開始するために呼び出す必要がある callable です
が呼び出されるapplication
と、リクエストを処理し、出力を構築して、次のことを行います。
- 通話
start_response('200 OK', Headers)
return [content]
シンプルな WSGI アプリは次のようになります。
def application(environ, start_response):
status = '200 OK'
output = 'Hello World!'
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]
HTTP リクエストの解析、ファイルのアップロードの処理、文字のエンコードなどには多くの詳細が含まれているため、既存の WSGI フレームワークを使用することを強くお勧めします。
Bottle、Flask、werkzeug、AppStruct などを見てみましょう...