Bottle: Python Web Framework — Bottle 0.13-dev documentation
これな。
今までWordPress以外のサーバサイドは全部CakePHPでやってきたんだけど、単純にCakeに飽きてきた。また、CakePHPが重たく感じられるようになった。パフォーマンスじゃなくて、フルスタックなのが。薄いフレームワークを重ねていく方向で考え始めています。
折角だから言語も変えようと思って、rubyかpythonか悩んだ結果、Ansible(fabric)を使っていることもあり、Python製の薄いWebフレームワークであるBottleをやってみることにしました。チュートリアル読み始めて1.5時間ぐらい経過した。
from bottle import route, run, template @route('/hello/<name>') def index(name): return template('<b>Hello {{name}}</b>!', name=name) run(host='localhost', port=8080,debug=True,reloader=True)
からの、
$ python3 hello.py
これだけでlocalhost:8080/hello/hogeにアクセスできて動いてくれる。ビルドインサーバーって便利やな・・・Pythonさえ入ってればWebアプリ作れるってことだもんな。PHPも5.4系からあるみたいだけど。
コントローラー部分は薄いほうがいいや。面白かったのは同じコンテキストパスでもGETとPOSTで違うメソッドが呼び出せることや、DictionaryをreturnするとJSONに自動パースしてくれること、正規表現を使ってパラメータ自体のバリデートができる(マッチしないと404を返す)
薄いフレームワークって特化している分フルスタックのフレームワークよりも細かな部分で気が効いているし、影響範囲も薄いから改修も難しくない。
ただ、フルスタックに比べると当然いろんな事が足りない。DBアクセス・メール送信・セッション管理・アクセス権限・ユニットテスト・・・その度にマイクロフレームワークを重ね着していくのと、CakePHPやRailsのように長いものには巻かれるのと。比べてみたいと思います。小規模やし。
Next Step into Bottle.
- Header/Footerのテンプレート差し込み - テンプレートからテンプレートの差し込み - HTTPセッション管理 - キャッシュ管理 - SQLAlchemyとの連携 - アプリ全体へのフィルターの差し込み - ビルドインではなくnginxを使ったサーバ構築
追記 at 2014/12/10/ 20:00
Header/Footerのテンプレート差し込みはこれで出来た。
% rebase('base.tpl', title='Page Title')
SimpleTemplate Engine — Bottle 0.13-dev documentation
<html> <head> <title>{{title or 'No title'}}</title> </head> <body> {{!base}} </body> </html>
テンプレートからテンプレートもただincludeするだけ
% rebase('base.html', section_title ='Page Title') <p>Page Content</p> #コントローラーからvalという変数を与えている % include('aaa.tpl',param=val)