Pythonのフレームワークbottleのメモ

# はじめに
bottleはpythonの軽量フレームワーク。本体はたった1ファイルだけらしい。
ググれば日本語の記事がたくさん出るので詳しくは割愛。

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

徐々に更新していく予定。

# 環境構築
## わしのマシン
OS X Yosemite
Ver 10.10.5

## pythonのインストール(2.7.10)
### 参考
http://qiita.com/zaburo/items/fbdaf6c04151671407db
http://qiita.com/zaburo/items/802423b0d2d63b0cb456

### 実施
* デフォルトだと2.7.11を入れてしまうので修正した
    * 2.7.11はバグがあって？うまくbottleが動かなかった

```
brew edit python

url "https://www.python.org/ftp/python/2.7.11/Python-2.7.11.tgz"
sha256 "82929b96fd6afc8da838b149107078c02fa1744b7e60999a8babbc0d3fa86fc6"
sha256 "e22a23bec350c287ddcc1d48b1a58b2b27a8d19e79837fa684e71c2eb7ea6456" => :yosemite

上記の箇所を↓↓↓に修正

url "https://www.python.org/ftp/python/2.7.10/Python-2.7.10.tgz"
sha256 "eda8ce6eec03e74991abb5384170e7c65fcd7522e409b8e83d7e6372add0f12a"
sha256 "726e13ae4d0befdc86ae82c1585393de814609d8f6b2fda5ef2be8514f654c4d" => :yosemite
```

* homebrewで入れる

```
brew install python
省略

which python
/usr/local/bin/python
```

* pipのバージョンアップ

```
pip2.7 install --upgrade pip
```

* setuptoolsのバージョンアップ

```
pip2.7 install --upgrade setuptools
```

* モジュールのインストール
    * とりあえず画像処理系
        * pillow
        * matplotlib
            * matplotlib入れれば他にも色々入るよう。依存関係あり？？

```
pip2.7 install matplotlib
Collecting matplotlib
  Downloading matplotlib-1.5.1-cp27-none-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (49.7MB)
    100% |████████████████████████████████| 49.7MB 18kB/s
Collecting numpy>=1.6 (from matplotlib)
  Downloading numpy-1.11.0-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (3.9MB)
    100% |████████████████████████████████| 3.9MB 227kB/s
Collecting pytz (from matplotlib)
  Downloading pytz-2016.4-py2.py3-none-any.whl (480kB)
    100% |████████████████████████████████| 481kB 841kB/s
Collecting python-dateutil (from matplotlib)
  Downloading python_dateutil-2.5.3-py2.py3-none-any.whl (201kB)
    100% |████████████████████████████████| 204kB 576kB/s
Collecting cycler (from matplotlib)
  Downloading cycler-0.10.0-py2.py3-none-any.whl
Collecting pyparsing!=2.0.0,!=2.0.4,>=1.5.6 (from matplotlib)
  Downloading pyparsing-2.1.1-py2.py3-none-any.whl
Collecting six>=1.5 (from python-dateutil->matplotlib)
  Downloading six-1.10.0-py2.py3-none-any.whl
Installing collected packages: numpy, pytz, six, python-dateutil, cycler, pyparsing, matplotlib
Successfully installed cycler-0.10.0 matplotlib-1.5.1 numpy-1.11.0 pyparsing-2.1.1 python-dateutil-2.5.3 pytz-2016.4 six-1.10.0


pip2.7 install pillow
```

## bottle環境構築
* bottleインストール

```
pip2.7 install bottle
```

* てきとーなコード用意
    * main.pyはルーティングを行う
    * top.pyはロジック

```/path/to/bottle/app/main.py
from bottle import route, run, static_file, url
from top import index

@route('/static/<filepath:path>')
def static(filepath):
    return static_file(filepath, root="./static")

@route('/')
def top():
    return index(url)

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

```/path/to/bottle/app/top.py
from bottle import template, view
import const

@view("index")
def index(url):
    return dict(url=url, design_path=const.DESIGN_PATH)
```

```/path/to/bottle/app/const.py
DESIGN_PATH = './static/startbootstrap-sb-admin-2-1.0.8'

```
* bottle起動

```
python main.py
```

* ブラウザで以下のURLにアクセス

```
http://localhost:8080/
```


# ディレクトリ構成
* いまのところこんなん
    * staticディレクトリ内は例

```
myapp
    ├── const.py        // 定数的な
    ├── main.py         // ルーティング
    ├── static          // 静的なファイルとかを設置
    │ ├─ css            // 例：css置くとか
    │ ├─ js             // 例：js置くとか
    │ └─ img            // 例：画像置くとか
    ├── top.py          // トップ画面の処理
    └── views           // テンプレート置き場
        └── index.tpl   // トップ画面のテンプレート
```

# 関数メモ
* run
    * サーバを起動する関数
    * host
        * ホストです
    * port
        * ポートです
    * debug
        * デバッグモードにするかどうか
    * reloader
        * ソースの変更保存時にサーバを自動で再起動するかどうか
        * これをTrueにしていない場合、ソース変更を反映する場合はサーバを手動で再起動しないといけない

# そのほか
* pipで入れたものたちは以下のパスに入った

```
/usr/local/lib/python2.7/site-packages/
```