2012年1月19日木曜日

PyramidフレームワークでPython+WSGIのWebアプリ(3)MVCに則ったサンプル(BankAccount)

pyramidフレームワークを用いて残高表示・入金・出金の機能を備えたBankAccountなるwebシステムを作ります.

ロジックはpyramid+makoテンプレート,DBはsqlite3,そして実行はWSGIの仕組みを用います.

今回の目的はMVCアーキテクチャに則って実装するための部品(プログラムファイル)としてどのようなものがあるかをしること,そしてそれぞれの部品にどのようなロジックを書けばいいかの傾向をつかむことです.

方針として,まずどのファイルにどのような記述をすればよいかをざっと示しますので,ご自分の環境で動作を確認してください.ひとまず動作させるところまでできればどこに何があればどうなるのか,俯瞰的に眺められるはずです.


1. 環境設定

まずはじめにpythonの環境を整えます.

前回はpyramidなどの外部パッケージをシステム側に直接インストールしましたが,今回はvirtualenvとよばれる小さなpython処理系をつくり,そこにpyramidをインストールします.このようなことをする理由としては,

  • 仮想環境上でアプリケーションが完結するのでシステムへの影響が少ない
  • 外部パッケージ部分で問題が発生し収集がつかなくなったとき,仮想環境ごと削除すればリセットできる
といったように問題を局所化できます.

さて,その方法ですが,仮想環境を作りたいディレクトリにて,

$python2.6 --version
Python 2.6.5
$easy_install-2.6 virtualenv
$virtualenv --no-site-packages pyramidtut
のようにします.するとpyramidtutディレクトリには,

$ls
bin include lib lib64
のように見えるはずです.

bin/ にはpythonの実行コマンドが格納されており,仮想環境で実行するアプリケーションに対しては以降すべてこのbinディレクトリから実行コマンドを選択していくことになります.

この際,外部パッケージによってはシステム側で使う場合と実行コマンドの名前が変更されているものもあります(paster create ... -> pcreate ... など)ので,注意してください.

次に必要なパッケージを仮想環境上にインストールします.

$pwd
/home/hoge/pyramidtut

$bin/easy_install-2.6 pyramid sqlalchemy pyramid_tm sqlahelper
必要な外部パッケージは以上となります.

 さらに,pyramidプロジェクトを作成します.
$bin/pcreate -t starter bankaccount
tオプションは「テンプレートを作成せよ」という意味です.starterはpyramidが所有するテンプレートの一つで,最小限の構成をあらかじめ持つテンプレートが作成されます.そしてそのプロジェクト名をbankaccountとしているわけです.

これで,準備が完了しました.


2. 実装

まずはプロジェクトの構成を確認します.

だいたい右図のようになっているはずです.

これから変更を施していくファイルは,

  • bankaccount/templates/index.mak
  • bankaccount/___init___.py
  • bankaccount/models.py
  • bankaccount/resources.py
  • bankaccount/views.py
  • development.ini
です.ひとつずつその実装例を載せていきます.


  • developent.ini
静的な情報を記述するファイルです.WSGIではこのファイルが引数となります.
[app:main]のブロックを以下のように変更してください.


  • ___init___.py
アプリケーションの初期化を行うファイルです.以下のように記述してください.


  • views.py
ユーザのURLアクセスに反応して起動するメソッドの内容を定義します.



  • resources.py
データベースアクセスのためのクエリなど,複数の機会から使い回すことのできる処理やインスタンスをまとめ,必要に応じて取得できるようにしておくためのクラスがあります.


  • mdoels.py
ロジックです.主にviewsから呼び出されます.



  • index.mak
makoテンプレートと呼ばれるものです.一般的なHTML記述に加え,pythonのコードを記述することができます.この仕組みを用いることにより,DBからデータをひっぱってきて表示したり,フォームのアクションスクリプトに先述のメソッドなどを指定することができます.




3. 実行実行アンドアクセス

以上の変更が完了したら,WSGIとして実行します.
$pwd
/home/hoge/pyramidtut/bankaccount
$../bin/pserve development.ini
[DEBUG]:BankAccount_15
Starting server in PID 3320.
serving on 0.0.0.0:6543 view at http://127.0.0.1:6543

エラーなど出ず,この状態になったならば出力にあるURLにアクセスしてみます.

以下のような画面が出れば成功です.
Balanceが現在DBに保持されている残高,Depositで入金処理,Withdrawで引き出し処理です.実際にフォームへ値を入れてBalanceの変化を観察してみましょう.意図通りの結果になりましたか?



今回の内容は以上です.全体構成とサンプルを動かすための開発の流れに焦点を起きました.次回はそれぞれのPythonファイルの詳細な記述を見ていくつもりで,この連番では最後の記事になる予定です.これはまだ僕も勉強中です.

もし実行された方は,成否をお知らせいただくとより内容のクオリティアップを期待できますので,気が向いたらコメント等でご一報ください.

うまくいかない場合はOSやエラー内容など明示していただけると助かります.

0 件のコメント:

コメントを投稿