トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

E71:MWSでmod_python.publisherを使ってみる の変更点

Top / 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を編集し、返却する
~関数の返却値がリクエストの返却値となる。

まあ、こんな感じですかね~

なんにしても、便利で簡単な仕組みです。