E71:MWSでmod_python.publisherを使ってみる
E71:MWSでmod_python.publisherを使ってみる †
さてさて、MWSチュートリアルでは、独自ハンドラーを使って動的WEBページの作成を行いましたが、こんどはmod_pythonのpublisherというハンドラーを使ってみることにします。
公式のチュートリアルのURL
Publisherハンドラーの解説
さてさて、とりあえず、動かしてみる。
Publisherハンドラーの動作概要 †
Publisherハンドラーは、uriに指定されたモジュール、関数を抽出し、該当するモジュールの関数を実行してくれます。
つまり、uriより処理の振り分けをやってくれます!
小生はいままではほとんどjavaしかやったことが無いのですが、処理の振り分けってだいたい何かしらのフレームワークを入れないとな気がしますが、mod_pythonであれば、標準で入ってるPublisher使えば簡単に出来てしまいます。
使ってみると、かなり感動ですよ笑
作成する前に †
本記事は、先にリンクを貼り付けたチュートリアルにだいたい従って作っていきます。
※チュートリアルでは、メールを送信するプログラムになってますが、メール送信はE71でやった場合そのまま出来るかわからないので、やってません。
今回作成するファイルは以下の構成で配置します。
E━data━Web server┳Data ┣conf ┣htdocs┳・・・ ┣・・・ ┗demo10 ← 今回作成するディレクトリ ┣.htaccess ←作成するファイル① ┣form.html ←作成するファイル② ┗form.py ←作成するファイル③
作成するファイルそれぞれは
- .htaccess : お約束で、ハンドラーの設定を記述
- form.html : 入力フォームを表示するためのhtmlファイル
- form.py : フォームのアクション時のターゲット
です。
.htaccessを作成 †
まず、.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を作成 †
次に、入力フォームを表示する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"」ってところです。
動きについては最後に解説します。
form.pyの作成 †
最後に、サーバで実行されるモジュールを作成します。
■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」の部分です。
def email( req, name, email, comment ):
第1引き数は固定で、reqを指定します。第2引き数からは、入力フォームで指定したnameを指定します。
他の部分は、端的には、入力された情報を成型して返却するだけなので説明は割愛します。
動作画面 †
さてさて、上のソースを書いて配置すると、次のような画面が表示されます。
画面に入力して、submitボタンを押すと
入力したメッセージの一部が表示される。
※一部文字化けしているのはご愛嬌笑
このとき、publisherはこんな動きをしてます。
- このフォームのsubmitボタンが押されて、リクエストが送信される
- .htaccessの設定により、「mod_python.publisher」が実行される
- mod_python.publisherは、 uriより、「form.py」モジュールの「email」関数を実行する
- email関数の中で出力するhtmlを編集し、返却する
関数の返却値がリクエストの返却値となる。
まあ、こんな感じですかね~
なんにしても、便利で簡単な仕組みです。