4.2 リクエストハンドラの概要

ハンドラ (handler) とは、リクエストにおける特定のフェイズ を処理する関数です。 Apache は一つのリクエストをリクエストの読み込み、 ヘッダの処理、コンテンツの提供、などといった複数のフェイズに分けて処理します。 いずれのフェイズに対しても、Apache のコア機能や、mod_python のように ユーザが Python で書いた関数に処理を渡すモジュール群の中からハンドラを 呼び出します。 Python で書いたハンドラは C で書いたハンドラと全く同じで、 以下のような規則に従います:

ハンドラ関数は常にリクエストオブジェクトへの参照を受け取ります。 (このマニュアル全体を通じて、リクエストオブジェクトはしばしば req という 変数で参照されています。)

各ハンドラは以下のような値を返します:

ハンドラはHTTP エラーコードを 返す 代わりに、 HTTP エラーコードを例外の値にしてapache.SERVER_RETURN 例外を 送出してエラーをシグナルできます。例えば、

raise apache.SERVER_RETURN, apache.HTTP_FORBIDDEN
のようにします。

ハンドラは req.write() メソッドを使って クライアントにコンテンツを送信できます。

POST リクエスト時のようにいクライアントデータがある場合、データは req.read() 関数を使って読み出せます。

注意: Apache のPython*Handler ディレクティブを有効にしているディレクトリは sys.path のパス中に前置されます。サーバ設定ファイルの<Directory> 外でディレクティブを設定した場合、ディレクトリの位置は分からず、sys.path にも加えられません。

最小限のハンドラの例は以下のようになります:

from mod_python import apache

def requesthandler(req):
    req.content_type = "text/plain"
    req.write("Hello World!")
    return apache.OK