18.4.3 wsgiref.simple_server - シンプルな WSGI HTTP サーバ

このモジュールは WSGI アプリケーションを提供する シンプルな HTTP サーバです(BaseHTTPServer がベースです)。 個々のサーバインスタンスは単一の WSGI アプリケーションを、特定のホストとポート上で 提供します。もし一つのホストとポート上で複数のアプリケーションを提供したいならば、 PATH_INFO をパースして個々のリクエストでどのアプリケーションを呼び出すか 選択するような WSGI アプリケーションを作るべきです。(例えば、 wsgiref.util から shift_path_info() を利用します。)

make_server( host, port, app [, server_class=WSGIServer [, handler_class=WSGIRequestHandler]])
hostport 上で待機し、 app へのコネクションを受け付ける WSGI サーバを作成します。戻り値は与えられた server_class のインスタンスで、 指定された handler_class を使ってリクエストを処理します。appPEP 333 で 定義されるところの WSGI アプリケーションでなければいけません。

使用例:

from wsgiref.simple_server import make_server, demo_app

httpd = make_server('', 8000, demo_app)
print "Serving HTTP on port 8000..."

# プロセスが死ぬまでリクエストに答える
httpd.serve_forever()

# 代替:1つのリクエストを受けて終了する
##httpd.handle_request()

demo_app( environ, start_response)
この関数は小規模ながら完全な WSGI アプリケーションで、 "Hello world!" メッセージと、environ パラメタに提供されている キー/値のペアをを含むテキストページを返します。 これは WSGI サーバ(wsgiref.simple_server のような)が シンプルな WSGI アプリケーションを正しく実行できるかを確かめるのに便利です。

クラス WSGIServer( server_address, RequestHandlerClass)
WSGIServer インスタンスを作成します。server_address(host,port) のタプル、そして RequesthandlerClass は リクエストの処理に使われる BaseHTTPServer.BaseHTTPRequestHandler の サブクラスでなければいけません。

make_server が細かい調整をやってくれるので、 通常はこのコンストラクタを呼ぶ必要はありません。

WSGIServerBaseHTTPServer.HTTPServer のサブクラスですので、 この全てのメソッド(serve_forever()handle_request() のような)が 利用できます。 WSGIServer も以下のような WSGI 固有メソッドを提供します:

set_app( application)
呼び出し可能(callable)な application を リクエストを受け取る WSGI アプリケーションとして設定します。

get_app( )
現在設定されている呼び出し可能(callable)アプリケーションを返します。

しかしながら、通常はこれらの追加されたメソッドを使う必要はありません。 set_app() は普通は make_server() によって呼ばれ、 get_app() は主にリクエストハンドラインスタンスの便宜上存在する からです。

クラス WSGIRequestHandler( request, client_address, server)
与えられた request(すなわちソケット)の HTTP ハンドラ、 client_addresshost,port) のタプル)、 serverWSGIServer インスタンス)の HTTP ハンドラを作成します。

このクラスのインスタンスを直接生成する必要はありません;これらは 必要に応じて WSGIServer オブジェクトによって自動的に生成されます。 しかしながら、このクラスをサブクラス化し、make_server() 関数に handler_class として与えることは可能でしょう。サブクラスにおいて オーバーライドする意味のありそうなものは:

get_environ( )
リクエストに対する WSGI 環境を含む辞書を返します。デフォルト実装では WSGIServer オブジェクトの base_environ 辞書属性のコンテンツを コピーし、それから HTTP リクエスト由来の様々なヘッダを追加しています。 このメソッド呼び出し毎に、PEP 333 に指定されている関連する CGI 環境変数を 全て含む新規の辞書を返さなければいけません。

get_stderr( )
wsgi.errors ストリームとして使われるオブジェクトを返します。 デフォルト実装では単に sys.stderr を返します。

handle( )
HTTP リクエストを処理します。デフォルト実装では実際の WGI アプリケーション インターフェースを実装するのに wsgiref.handlers クラスを使って ハンドラインスタンスを作成します。

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。