プログラミング

Bottleフレームワーク入門

Bottleは、PythonでWebアプリケーションを開発するための軽量なフレームワークです。このフレームワークはシンプルで、初心者にも扱いやすく、Pythonの学習を進める上でも非常に役立ちます。この記事では、Bottleを使ってWebアプリケーションを開発する方法を完全かつ包括的に説明します。

1. Bottleとは?

Bottleは、非常にシンプルで軽量なPythonのWebフレームワークです。フレームワーク自体が小さく、依存関係も最小限に抑えられているため、素早く開発を始めることができます。多くの大規模なフレームワーク(例えばDjangoやFlask)と比較して、Bottleは非常に小さなフットプリントを持っており、シンプルなWebアプリケーションやAPIの開発に最適です。

2. Bottleのインストール

Bottleを使うには、まずPythonがインストールされている必要があります。次に、Bottleをインストールします。以下のコマンドを実行することで、Bottleを簡単にインストールできます。

bash
pip install bottle

これで、Bottleフレームワークを使ってPythonでWebアプリケーションを作成できる準備が整いました。

3. 最初のBottleアプリケーションを作成

次に、最も基本的なBottleアプリケーションを作成してみましょう。以下は、非常にシンプルな「Hello, World!」を表示するアプリケーションの例です。

python
from bottle import Bottle, run app = Bottle() @app.route('/') def home(): return "Hello, World!" run(app, host='localhost', port=8080)

このコードを実行することで、ローカルホスト(localhost)の8080ポートでサーバーが立ち上がり、ブラウザでアクセスすると「Hello, World!」と表示されます。

コードの説明:

  • Bottle クラスをインポートし、app というインスタンスを作成します。

  • @app.route('/') デコレーターを使用して、ルートURL(/)にアクセスしたときに実行される関数 home() を定義します。

  • run(app, host='localhost', port=8080) はアプリケーションをローカルサーバーで実行するためのコマンドです。

4. URLルーティング

Bottleでは、URLパスとPythonの関数をマッピングするために「ルート」を定義します。上記の例でも使われている @app.route() デコレーターを使って、特定のURLパスに対するリクエストを処理する関数を指定できます。

複数のルートを定義する例:

python
from bottle import Bottle, run app = Bottle() @app.route('/') def home(): return "Welcome to the home page!" @app.route('/about') def about(): return "This is the about page." @app.route('/hello/') def greet(name): return f"Hello, {name}!" run(app, host='localhost', port=8080)

このコードでは、以下の3つのルートを定義しています:

  • / : ホームページ

  • /about : アバウトページ

  • /hello/ : パラメーターとして名前を受け取り、挨拶を返すページ

URLのパラメーターは のように <...> で囲んで指定します。例えば、/hello/Taro にアクセスすると、Taro という名前を使って「Hello, Taro!」と表示されます。

5. テンプレートエンジンの使用

Bottleは、HTMLを動的に生成するためにテンプレートエンジンをサポートしています。標準では、SimpleTemplate が使用されますが、Jinja2などの他のテンプレートエンジンも使用することができます。

以下の例では、Bottleのデフォルトテンプレートエンジンを使ってHTMLを生成します。

python
from bottle import Bottle, run, template app = Bottle() @app.route('/') def home(): return template('Hello, {{name}}!', name="World") run(app, host='localhost', port=8080)

template() 関数は、テンプレート文字列に埋め込まれた変数({{name}})を置き換えます。この場合、name という変数を「World」に設定して、ブラウザに「Hello, World!」と表示します。

6. フォームデータの処理

Bottleでは、ユーザーから送信されたフォームデータを簡単に受け取ることができます。以下は、フォームデータを受け取って表示する簡単な例です。

python
from bottle import Bottle, run, request, template app = Bottle() @app.route('/') def form(): return '''
Name:
'''
@app.route('/submit', method='POST') def submit(): name = request.forms.get('name') return template('Hello, {{name}}!', name=name) run(app, host='localhost', port=8080)

この例では、/ ルートでフォームを表示し、フォームが送信されると /submit ルートでそのデータを受け取ります。ユーザーが入力した名前がrequest.forms.get('name')で取得され、テンプレートに渡されて表示されます。

7. 静的ファイルの提供

Bottleは、静的ファイル(CSS、JavaScript、画像など)を提供することもできます。@app.route()static_file() を使って、特定のディレクトリ内のファイルを提供します。

python
from bottle import Bottle, run, static_file app = Bottle() @app.route('/static/') def server_static(filename): return static_file(filename, root='./static') run(app, host='localhost', port=8080)

この例では、/static/filename にアクセスすることで、./static フォルダ内のファイルを提供します。

8. データベースとの連携

Bottleはデータベースとの連携も簡単に行えます。ここでは、SQLiteデータベースを使ってデータを保存し、表示する例を示します。

python
import sqlite3 from bottle import Bottle, run, request, template app = Bottle() # データベースの接続 def connect_db(): return sqlite3.connect('example.db') @app.route('/add', method='POST') def add_entry(): name = request.forms.get('name') conn = connect_db() c = conn.cursor() c.execute('INSERT INTO users (name) VALUES (?)', (name,)) conn.commit() conn.close() return 'User added!' @app.route('/list') def list_entries(): conn = connect_db() c = conn.cursor() c.execute('SELECT * FROM users') users = c.fetchall() conn.close() return template('{{users}}', users=users) run(app, host='localhost', port=8080)

このコードでは、ユーザーの名前をデータベースに保存するフォームと、データベースに保存された名前をリスト表示するページを作成しています。

9. 結論

Bottleはそのシンプルさと柔軟性から、Webアプリケーションの開発に非常に適したフレームワークです。シンプルなWebアプリケーションから、データベース連携を含むより複雑なアプリケーションまで、幅広い用途に対応できます。また、ドキュメントが豊富で、学習をサポートする情報が揃っているため、PythonでWebアプリケーションを作りたいと考えている人にとって非常に良い選択肢です。

Back to top button