Life is Really Short, Have Your Life!!

ござ先輩の主に技術的なメモ

PythonのBottle、始めました


Bottle: Python Web Framework — Bottle 0.13-dev documentation

これな。

今までWordPress以外のサーバサイドは全部CakePHPでやってきたんだけど、単純にCakeに飽きてきた。また、CakePHPが重たく感じられるようになった。パフォーマンスじゃなくて、フルスタックなのが。薄いフレームワークを重ねていく方向で考え始めています。

折角だから言語も変えようと思って、rubypythonか悩んだ結果、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アクセス・メール送信・セッション管理・アクセス権限・ユニットテスト・・・その度にマイクロフレームワークを重ね着していくのと、CakePHPRailsのように長いものには巻かれるのと。比べてみたいと思います。小規模やし。

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)