mod_pythonを勉強し始めた その2 〜作った関数を動かしてみよう〜

勉強再開。今日はmod_pythonチュートリアルを終わらせます。

pbulisherハンドラで関数を動かす

3.1 publisher ハンドラを使ってみる

  AddHandler mod_python .py
  PythonHandler mod_python.publisher
  PythonDebug On

という設定を.htaccessに書くと、モジュール内の関数とか変数にURLでアクセスできるようになる。
たとえば、mytest.pyに、def test():で作ったtest()にアクセスする場合は、mytest.py/test
とURLで指定してアクセスすると、test()が動くようだ。(でもURLハックされたら怖いんですけどwww)

Python*Handlerディレクティブ

PythonHandlerとは設定ディレクティブといわれる。ディレクティブは設定するコマンドのようなものらしい。
で、あらかじめ構文が決まっていて、PythonAuthenHandlerは認証ハンドラとして機能するとのこと。

5. Apache設定ディレクティブ

最初、PythonTestHandlerとか適当な名前を付けて、testhandler()が動くかやってみたけどこれは誤り。構文が決まっているので当たり前ですね。この場合は、pblisherハンドラを使えばいい。

試してみた

ってことで、pblisherハンドラで、test()にfor文でHello Worldを100回書いてみた。そしたら100個分表示されて安心。
けど、そしたら最後の行に"0"が付け加えられていたけど、コレはナンだろう。Apache.OKと返したから結果がついたのかな?

→消したらつかなかったから、そういうことっぽい。

コードは以下の通り。まぁ普通ですよね。けどサーバーで動いてるんです。感動した!
100回もカウントしたのかと言われるかもしれないので、一応回数も載せてあります。

# -*- coding: shift-jis -*-

from mod_python import apache

def test(req):

	req.content_type = "text/plain"
	for i in range(100):
		req.write("%d 回目のHello World!\n" % (i+1))

	return apache.OK

日本語が表示できないっぽい

日本語を書き出してみようと思ったら、
Non-ASCII character '\x89' 〜 but no encoding declared; 〜
とか出てきた。エンコードの問題っぽいかな。何か設定できたはずだからあとでやっておこう。
→、エンコードの宣言をすればいいらしい。

エンコード宣言 - 獨習Python - pythonグループ

たとえば、Shift-jisを指定したいなら、

# -*- coding: shift-jis -*-

とすればよいようです。実際に日本語も出力できました。
これはEmacsの宣言と同じで、これが推奨された書き方のようです。
もちろん、ファイルの文字コードはShitf-JISですよ。unicodeならunicode

あとがき

そういえば、コードや.htaccessを書き換えた後にApacheを再起動していましたが、しなくてもリロードすればちゃんと読み込んでくれるようですね。面倒なことをしなくても良かったのか!