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

E71:MWSでmod_python.publisherを使ってみる

Last-modified: 2013-08-24 (土) 02:14:21 (2982d)
Top / 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   ←作成するファイル③

作成するファイルそれぞれは

  1. .htaccess : お約束で、ハンドラーの設定を記述
  2. form.html : 入力フォームを表示するためのhtmlファイル
  3. 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
  1. apacheのハンドラーとしてmod_pythonを指定する、お決まりの一文です。
  2. python handlerとして、publisherを指定します。これで、このディレクトリ配下の「.py」をurlとして指定するリクエストは、「publisher」に引き渡されます。
  3. デバッグモードをオンにします。
  4. その他のオプションは指定しません。

まあ、端的には 「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を指定します。

他の部分は、端的には、入力された情報を成型して返却するだけなので説明は割愛します。

動作画面

さてさて、上のソースを書いて配置すると、次のような画面が表示されます。

Screenshot0057.jpg

画面に入力して、submitボタンを押すと

Screenshot0058.jpg

入力したメッセージの一部が表示される。

Screenshot0059.jpg

※一部文字化けしているのはご愛嬌笑

このとき、publisherはこんな動きをしてます。

  1. このフォームのsubmitボタンが押されて、リクエストが送信される
  2. .htaccessの設定により、「mod_python.publisher」が実行される
  3. mod_python.publisherは、 uriより、「form.py」モジュールの「email」関数を実行する
  4. email関数の中で出力するhtmlを編集し、返却する

    関数の返却値がリクエストの返却値となる。

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

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