- 追加された行はこの色です。
- 削除された行はこの色です。
*E71:MWSでmod_python.publisherを使ってみる [#e612bfb5]
さてさて、MWSチュートリアルでは、独自ハンドラーを使って動的WEBページの作成を行いましたが、こんどはmod_pythonのpublisherというハンドラーを使ってみることにします。
公式のチュートリアルのURL
-http://www.python.jp/doc/contrib/modpython/tutorial.html
Publisherハンドラーの解説
-http://www.python.jp/doc/contrib/modpython/hand-pub.html
さてさて、とりあえず、動かしてみる。
***Publisherハンドラーの動作概要 [#pf74ae2f]
Publisherハンドラーは、uriに指定されたモジュール、関数を抽出し、該当するモジュールの関数を実行してくれます。
つまり、uriより処理の振り分けをやってくれます!
小生はいままではほとんどjavaしかやったことが無いのですが、処理の振り分けってだいたい何かしらのフレームワークを入れないとな気がしますが、mod_pythonであれば、標準で入ってるPublisher使えば簡単に出来てしまいます。
使ってみると、かなり感動ですよ笑
***作成する前に [#c328f021]
本記事は、先にリンクを貼り付けたチュートリアルに''だいたい''従って作っていきます。
&br;※チュートリアルでは、メールを送信するプログラムになってますが、メール送信はE71でやった場合そのまま出来るかわからないので、やってません。
今回作成するファイルは以下の構成で配置します。
E━data━Web server┳Data
┣conf
┣htdocs┳・・・
┣・・・
┗demo10 ← 今回作成するディレクトリ
┣.htaccess ←作成するファイル①
┣form.html ←作成するファイル②
┗form.py ←作成するファイル③
作成するファイルそれぞれは
+.htaccess : お約束で、ハンドラーの設定を記述
+form.html : 入力フォームを表示するためのhtmlファイル
+form.py : フォームのアクション時のターゲット
です。
***.htaccessを作成 [#i55cbfa8]
まず、.htaccessを作成します。
■.htaccess
# setting Handler
AddHandler mod_python .py ←1
# Add Python Handler
PythonHandler mod_python.publisher ←2
# Debug On
PythonDebug On ←3
# Option OFF
Options None ←4
+apacheのハンドラーとしてmod_pythonを指定する、お決まりの一文です。
+python handlerとして、publisherを指定します。これで、このディレクトリ配下の「.py」をurlとして指定するリクエストは、「publisher」に引き渡されます。
+デバッグモードをオンにします。
+その他のオプションは指定しません。
まあ、端的には 「2」の設定がpublisherを使う際に必要となります。
***form.htmlを作成 [#qa4f9d40]
次に、入力フォームを表示するhtmlを作成します。
■form.html
<html>
Send feedback:
<p>
<form action="form.py/email" method="POST"> ←1
Name: <input type="text" name="name"><br>
Email: <input type="text" name="email"><br>
Comment: <textarea name="comment" rows=4 cols=20 ></textarea><br>
<input type="submit">
</form>
</html>
ポイントは、「1」の 「action="form.py/email"」ってところです。&br;
動きについては最後に解説します。
***form.pyの作成 [#mb786cf2]
最後に、サーバで実行されるモジュールを作成します。
■form.py
WEBMASTER = 'webmaster'
def email( req, name, email, comment ): ←1
# ユーザがすべての情報を入力したか確認する
if not ( name and email and comment ):
return "必要な情報が入力されてません"
# 画面に返却するメッセージを作成する
msg = """¥
<html>
From :%s
To %s
Comment: %s
</html>
""" % (name, WEBMASTER, comment)
return msg
このソースで、一にも二にも、重要なのは「1」の部分です。&br;&br;
def email( req, name, email, comment ):
第1引き数は固定で、reqを指定します。第2引き数からは、入力フォームで指定したnameを指定します。
他の部分は、端的には、入力された情報を成型して返却するだけなので説明は割愛します。
***動作画面 [#kfb5f856]
さてさて、上のソースを書いて配置すると、次のような画面が表示されます。
&ref(Screenshot0057.jpg);
画面に入力して、submitボタンを押すと
&ref(Screenshot0058.jpg);
入力したメッセージの一部が表示される。
&ref(Screenshot0059.jpg);
※一部文字化けしているのはご愛嬌笑
このとき、publisherはこんな動きをしてます。
+このフォームのsubmitボタンが押されて、リクエストが送信される
+.htaccessの設定により、「mod_python.publisher」が実行される
+mod_python.publisherは、 uriより、「form.py」モジュールの「email」関数を実行する
+email関数の中で出力するhtmlを編集し、返却する
~関数の返却値がリクエストの返却値となる。
まあ、こんな感じですかね~
なんにしても、便利で簡単な仕組みです。