Pythonの軽量フレームワーク bottleを試してみた

Pythonロゴ
Pythonで簡単に、簡単なWebサイトを公開できる、Sinatraっぽいのはないかな〜と探していたらBottleというフレームワークがヒットしました。
軽量でかなり評判いいです。フレームワークを勉強するには「もってこい」だという記事もあったりします。 最初に試すならBottleでしょ、ということで試してみることにしました。

参考にしたサイト

ありがとうございます。

インストール等

Bottleはpipなどでインストールも可能みたいですが、一つのファイルで構成されているし、テストの意味合いが強かったのでダウンロードして試しました。

Bottleのダウンロード

適当なディレクトリに移動してBottleをダウンロードしました。
$ curl -O https://raw.githubusercontent.com/bottlepy/bottle/master/bottle.py
bottle.pyというファイルがダウンロードされます。

app.pyにルートやコントローラーなどの記述

app.pyというファイルを作って(ファイル名は好きな名前でOK)、以下を記述します。
from bottle import get, post, route, run, template

@get('/')
def index():
  return template('index', name=None)
    
@get('/hello/')
def hello(name):
  return template('Hello {{name}}!', name=name)

####################################################################
# スタティックファイル インポート設定エリア
@get('/static/css/')
def css(filename):
    return static_file(filename, root="static/css")

@get("/static/img/")
def img(filepath):
    return static_file(filepath, root="static/img")
####################################################################

run(host='localhost', port=8889, debug=True)

View用テンプレート

viewsというフォルダを作成してindex.htmlというファイル名で表示用のhtmlを作成します。
拡張子はなんでもいいみたいです。(.pyとか.mdとかはダメでした・・・)
<div id="container">
<div id="main">
<h1>Hello, 真鯛たち</h1>
<img src="/static/img/tairabber.jpg" alt="真鯛が釣れた!タイラバの威力!" width="100%" height="100%" /></div>
</div>

静的ファイルではまった

大したトラブルもなく進んできたのですが、cssや画像の読み込み方で一番ハマりました。 こんな感じのフォルダ・ファイル構成になっていて、

ファイル構成
staticというフォルダを作成して、さらにその中にcss, imgなどの静的ファイル用のフォルダを作成しました。
Python部は
@get('/static/css/')
def css(filename):
    return static_file(filename, root="static/css")
cssのリンクは
/filename:re:.*.css
などとすればいいみたいです。

実行

$ python app.py

Bottle v0.13-dev server starting up (using WSGIRefServer())...
Listening on http://localhost:8889/
Hit Ctrl-C to quit.
指定のポート番号をつけてブラウザでアクセスします。

以上になります

鹿児島県の出水市という所に住んでいまして、インターネット周辺で色々活動して行きたいと思ってるところです。 Webサイト作ったり、サーバ設定したり、プログラムしたりしている、釣りと木工好きなMacユーザです。 今はデータサイエンスに興味を持って競馬AI予想を頑張ってます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


The reCAPTCHA verification period has expired. Please reload the page.

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください