偶然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そのまま)
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
というフォルダを作って、そこに入れる。
<h1>{{name}}</h1>
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)
こうすることでブラウザ上にエラーが表示されるのと、ファイルの変更時に自動的にサーバを再起動してくれる。