BottleというWEBアプリケーションフレームワークをご存知でしょうか。 DjangoやFlask等さまざまなWEBアプリケーションフレームワークがある中で、Bottleはもっとも軽量なフレームワークです。
1ファイル(bottle.py)で構成されているにもかかわらず、以下のようにWEBアプリケーションに必要な機能が含まれています。
- Routing
- 動的なルーティング含め、実行される関数とのマッピングを提供
- Templates
- 組み込みのテンプレートエンジンを搭載し、さらにJinja2等のテンプレートもサポート
- Utilities
- POSTされたFormデータやCookie、FileのUploadに関する機能を提供
- Server
- 組み込みのHTTPサーバを搭載し、開発時の動作確認が容易
- その他のサーバとの連携も可能
これらの機能以外にも、Pluginを導入すればさまざまな 機能が利用可能になります。
インストール
pipでインストール可能です。
(bottle_sample) > pip install bottle Collecting bottle Downloading bottle-0.12.13.tar.gz (70kB) 100% |████████████████████████████████| 71kB 61kB/s Building wheels for collected packages: bottle Running setup.py bdist_wheel for bottle ... done Stored in directory: C:\Users\debzow\AppData\Local\pip\Cache\wheels\49\cf\37\132916b926fae01d6e27d94c0018e3ad07452ec3760e24a36a Successfully built bottle Installing collected packages: bottle Successfully installed bottle-0.12.13
また、単一ファイルで構成されているため単に以下のURLからファイルをダウンロードし自分のアプリと同じ ディレクトリにおくだけでも利用できます。
https://raw.githubusercontent.com/bottlepy/bottle/master/bottle.py
ダウンロードするだけで言いというのは社内プロキシに虐げられていたり、そもそも直接ネットにつなげない 環境でもこれなら導入できるのでお手軽ですね。
最小限のアプリ
マニュアルのトップページとほぼ同じコードではありますが、簡単に動作確認をして見ましょう。 とりあえず、pipではなくDLした場合のディレクトリ構成はこんな感じです。 ※pipしたならbottle.pyはここに無くてよいです。
(bottle_sample) > ls -ltr total 168 -rwxr-xr-x 1 debzow 197121 169668 Aug 30 22:27 bottle.py -- Bottle自体 -rw-r--r-- 1 debzow 197121 0 Aug 30 22:28 app.py -- 自分で作成するファイル
ソースはこんな感じです。マニュアルのものを少し手直ししてコメントをつけました。
# coding: utf-8 # bottle.pyから使う関数をインポート from bottle import route, run, template # /hello/xxxとアクセスされたらindexという関数が呼ばれる # xxxの部分は関数の引数として渡される @route('/hello/<name>') def index(name): # {{name}}の部分をname=で渡した文字列で置き換えてHTMLとして表示する return template('<b>Hello {{name}}</b>!', name=name) if __name__ == "__main__": # テスト用のサーバをlocalhost:8080で起動する run(host='localhost', port=8080)
実行してみましょう。
(bottle_sample) > python app.py Bottle v0.13-dev server starting up (using WSGIRefServer())... Listening on http://localhost:8080/ Hit Ctrl-C to quit.
プロンプトは戻りませんので、この状態でブラウザから以下のURLにアクセスします。
http://localhost:8080/hello/denzow
アクセスすると、ブラウザにはHello denzow!と表示されます。denzowの部分を別の文字にすると それぞれ表示される内容が変わるはずです。
これで最低限の動作確認ができましたので、プロンプトはctrl + c
でサーバを停止しておきましょう。
まとめ
まずはBottleの導入部分についてまとめました。次はルーティングについてもう少し 複雑な内容をやってみたいと思います。
また、Bottleについて以前勉強会で使用した資料を 参考程度ですが載せて起きますのでよろしければごらんください。