環境構築

“bottle.py”をディレクトリに置けば、そのディレクトリでプログラミングができるようになります。ターミナルで、作業をしたいディレクトリに移動し、wgetコマンドで”bottle.py”を入手してください。

wget https://github.com/bottlepy/bottle/raw/master/bottle.py

wgetコマンドが使えないときは、以下のコマンドでwgetを使用可能にしてください。

brew install wget


サーバの起動

bottle.pyがあるディレクトリで、以下のsample.pyファイルを作成する。

from bottle import route, run

@route("/")
def index():
    return "Hello!"

run(reloader=True, port=9999)

その後、ターミナルでsample.pyを実行する。
(atomで開いている場合は、パッケージ→Script→Run Scriptでokです)

python3 sample.py

すると、ターミナルに以下の文章があるので、Webブラウザを開き、URLに打ち込む。

Bottle v0.13-dev server starting up (using WSGIRefServer())...
Listening on http://xxx.xxx.xxx.xxx:9999/
Hit Ctrl-C to quit.

ブラウザに、Hello!と出て入ればokです。サーバの起動を確認できました。
@route(“/”)は、ドキュメントルート、つまり、サーバのipアドレスをURLに入れた時に表示されるページであることを意味しています。index関数のreturnにHTMLを入れると、そのページが表示されると言う仕組みになっています。例えば、以下のように書くと、ボタンが出てきます。

from bottle import route, run

@route("/")
def index():
    HTMLtext = ''
    HTMLtext = HTMLtext + '<head>'
    HTMLtext = HTMLtext + '<title> PythonHTML </title>'
    HTMLtext = HTMLtext + '</head>'
    HTMLtext = HTMLtext + '<body>'
    HTMLtext = HTMLtext + '<p>Go to the Top Page</p>'
    HTMLtext = HTMLtext + '<input type="submit" value="button!" onclick="location.href=\'http://int-info.com\'">'
    HTMLtext = HTMLtext + '</a>'
    HTMLtext = HTMLtext + '</body>'
    HTMLtext = HTMLtext + '</html>'
    return HTMLtext

run(reloader=True, port=9999)


なお、以下の記述は、ボタンが押された時(onclick)にhttp://int-info.comに飛ぶ、という意味があります。

<input type="submit" value="button!" onclick="location.href=\'http://int-info.com\'">


デバッグ環境

書いておくと、エラーが出たときにブラウザに理由を記載してくれます。
from bottle import debug
debug(True)


エラー対応

実行すると、ターミナルから「address already use」みたいなエラーが返ってくることがあります。これはサーバを適切に停止させなかった場合に起こります。

lsof -i :9999

と、pythonで指定しているポート番号を打ちます。すると、起動中のPIDの数字が帰ってくるので、以下のコマンドを打ちます。

kill xxx

xxxはPIDの数字です。すると、サーバが停止します。