web2pyを使う

Djangoを使うで2日ほど触ってみたが、やっぱり「コントローラー」を「ビュー」と呼ぶ感覚になれずにいる。Pythonのお勉強が進むまでは、ふつーのMVC用語を使っているweb2pyでいろいろ弄ってみたい。

resource

本家:http://web2py.com/

日本語コミュニティ:http://sites.google.com/site/web2pyjapan/

起動を試す

ソースを展開したディレクトリでpython web2py.pyで起動。

その際、ワンタイムのadminパスワードを聞いてくるのでテキトウに入れる(なおtlkのGUIモードはVPSサーバなので使えない)。

あとはctrl z;bgでバックグラウンドで動かして

w3m http://localhost:8000

すればとりあえずオッケー。

nginx/uwsgiのweb2py設定

もっともシンプルに書けば次のようになった。

なお設定ファイルの置き場所やinit.d起動ファイルは「Djangoを使う(複数のバーチャルホストを試みる)」記載のものと同一。

nginx

server {
    listen       80;
    server_name  web2py.radio-age.com;
    location / {
        uwsgi_pass 127.0.0.1:8000;
        include uwsgi_params;
    }
}

uwsgi yaml ファイル

uwsgi:
 socket: 127.0.0.1:8000
 pythonpath: /var/www/web2py
 module: wsgihandler
 processes: 2
 daemonize: /var/log/uwsgi-web2py.log

adminモードを外部から使えるようにする。

リバースプロキシでも出来そうだが、SSHトンネルを使うのが楽。

http://sites.google.com/site/web2pyjapan/book/11/securing-sessions-and-admin

下はport番号8002で動作させた様子。

no title


なお、起動時にパスワードを指定するとそのままps axで駄々漏れするので注意。

<recycle>キーワードをもちいれば、web2pyのparameters_ポート番号.pyファイルに保存されているハッシュが使われるので必ずそうすること。

python web2py.py -p 8002 -i 127.0.0.1 -a "<recycle>"

なおローカルマシンのポートフォワードは、.ssh/configに以下のような項目をつくっておけばいい。

Host web2py

Hostname radio-age.com

User ******

LocalForward 8002 localhost:8002

あとはssh web2py

ドキュメント閲覧覚え

以下日本語訳3版。ランダムに(いちおう章順をおって)気になることを簡単にメモ

  • web2pyはimportをファイルごとにその都度はやらない。独自モジュールをインポートするから。p.24
  • Pythonスタイルガイド(PEP8)からみたweb2pyの記述作法例外(特にHTML要素に対応するヘルパーとバリデタのオブジェクト表現はすべて大文字 (ex. DivではなくてDIV))。p.41
  • chdirのようなos関係関数はスレッドセーフではないので利用しないこと。p.64
  • actionが辞書(dict)を返すとき[controller]/[function].[extention]をもつビューを探す(したがってビュー名は*.htmlのかたちをとる。p.75
  • ビューが見当たらないときは generic.[extention]というビルトインのビューを使う。p.75
  • sessionはsession.(名前)で普通にアクセスできる。p.77
  • バリデタの仕様:大文字のHTML要素名をもつヘルパー(関数)内部にバリデタ定義を書く。なお同ヘルパーはHTML属性値はアンダースコア(_)属性名で定義でき、バリデタ定義はアンダースコアはつかない。p.81
  • デフォルトアプリ:initアプリケーションはURLパスルートがリクエストされたときに起動する。initがないばあいは、welcomeアプリが起動する。デフォルトアプリはroutes.pyのdefault_applicationで定義可能。p.155(*1)(*2)
  • URLリライト。これは自分のニーズとして重要な機能。routes.pyのroutes_in(URLマッピング),routes_out(リバースURLマッピング)で定義可能(タプル).pp.156-

アプリケーションをコマンドラインで作成

python web2py.py -S 名前

で作成出来る。

とりあえずデフォルトアプリのinit

python web2py.py -S init

を作成しておく。




*1: なお、これとは別にrouter.pyというのがある。 1.9.3から導入されたものだが、幸いBook第四版の翻訳作業が進んでおりhttp://sites.google.com/site/web2pyjapan/book/04/url-rewriteで、その概要を日本語で読むことができる。

*2: なおこの設定を有効にするには、web2pyのreloadが必要。

this file --> last modified:2012-04-06 16:37:01