pythonの軽量framework, Bottle

  • 133
    いいね
  • 9
    コメント
この記事は最終更新日から1年以上が経過しています。

偶然pythonを使って簡単なweb applicationを作ることになったので使ってみた。

求めるものとしては

  • 導入が簡単
  • routingなどの最低限の機能
  • template

があればよかった。ちょうど探してみるとBottleというのが良さげだったのでメモ代わりに。

とりあえずpython自体も初めて使うのでpythonのインストールから

python2系か3系か、どっちを使えばいいのかすら分からなかったのでとりあえず複数の環境を持てるpyenvを使うことに。

pyenvのinstall

cd ~
git clone git://github.com/yyuu/pyenv.git .pyenv

echo 'export PYENV_ROOT="${HOME}/.pyenv"' >> ~/.zshrc
echo 'eval "$(plenv init -)"' >> ~/.zshrc
exec $SHELL -l

とりあえず2.7系を入れる
pip(gemみたいな?)も一緒に入ってくれるので便利

pyenv install 2.7.5

そしたらreadlineがないって言われたのでhomebrewでinstall

brew install readline
brew link readline

common problemらしく、ここに他にもいろいろ書いてある

とりあえず入ったのでBottleを使う

pip install bottle

で入る。

bottleはbottle.pyという1ファイルがすべて。そこから必要なものをimportしながら使っていくらしい。

とりあえずhello world(sampleそのまま)

hello.py
from bottle import route, run

@route('/hello/:name')
def hello(name):
    return '<h1>Hello %s!</h1>' % name

run(host='localhost', port=8080)

これでコマンドライン上で

python hello.py

これで locahost:8080/hello/tak0303 にアクセスすると、
Hello tak0303! となる。簡単。

htmlでtemplateを使いたいときは同じディレクトリにviewsというフォルダを作って、そこに入れる。

show.tpl(拡張子はなんでもいいらしい)
<h1>{{name}}</h1>
hello.py
from bottle import route, run, template

@route('/hello/<name>')
def hello(name='unknown'):
    return template('show', name=name)

run(host='localhost', port=8080)

こんな感じでできる

あと、最初の状態だと、ファイルの変更時にサーバを再起動しなければならず、また、デバッグしづらく、かなり不便なので

run(host='localhost', port=8080, debug=True, reloader=True)

こうすることでブラウザ上にエラーが表示されるのと、ファイルの変更時に自動的にサーバを再起動してくれる。

参考: http://bottlepy.org/docs/dev/index.html