E71:MWSでmod_python.publisherを使ってみる の変更点
Top / E71:MWSでmod_python.publisherを使ってみる
- 追加された行はこの色です。
- 削除された行はこの色です。
- E71:MWSでmod_python.publisherを使ってみる へ行く。
- E71:MWSでmod_python.publisherを使ってみる の差分を削除
*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) &ref(Screenshot0057.jpg); 画面に入力して、submitボタンを押すと &ref(Screenshot0058.jpg) &ref(Screenshot0058.jpg); 入力したメッセージの一部が表示される。 &ref(Screenshot0059.jpg) &ref(Screenshot0059.jpg); ※一部文字化けしているのはご愛嬌笑 このとき、publisherはこんな動きをしてます。 +このフォームのsubmitボタンが押されて、リクエストが送信される +.htaccessの設定により、「mod_python.publisher」が実行される +mod_python.publisherは、 uriより、「form.py」モジュールの「email」関数を実行する +email関数の中で出力するhtmlを編集し、返却する ~関数の返却値がリクエストの返却値となる。 まあ、こんな感じですかね~ なんにしても、便利で簡単な仕組みです。