mod_pythonを勉強し始めた その2 〜作った関数を動かしてみよう〜
勉強再開。今日はmod_pythonのチュートリアルを終わらせます。
pbulisherハンドラで関数を動かす
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は認証ハンドラとして機能するとのこと。
最初、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; 〜
とか出てきた。エンコードの問題っぽいかな。何か設定できたはずだからあとでやっておこう。
→、エンコードの宣言をすればいいらしい。
たとえば、Shift-jisを指定したいなら、
# -*- coding: shift-jis -*-
とすればよいようです。実際に日本語も出力できました。
これはEmacsの宣言と同じで、これが推奨された書き方のようです。
もちろん、ファイルの文字コードはShitf-JISですよ。unicodeならunicodeで