【Python】Webフレームワーク「Bottle」のインストールから使い方を簡単に解説

目次から探す

Bottleフレームワークでのセッション管理

Webアプリケーションでは、ユーザーの状態やデータを一定期間保持するためにセッション管理が必要です。

Bottleフレームワークでは、クッキーを使ったセッション管理とサーバーサイドでのセッション管理の2つの方法があります。

それぞれの方法について解説します。

クッキーを使ったセッション管理

クッキーを使ったセッション管理では、ユーザーのブラウザにデータを保存し、それを利用してセッションを管理します。

Bottleフレームワークでは、response.set_cookie関数とrequest.get_cookie関数を使ってクッキーを扱うことができます。

以下は、クッキーを使ったセッション管理のサンプルコードです。


from bottle import route, run, request, response, template
@route('/login', method='POST')
def login():
    username = request.forms.get('username')
    password = request.forms.get('password')
    if username == 'admin' and password == 'password':
        response.set_cookie('username', username)
        return template('ログインに成功しました。ユーザー名: {{username}}', username=username)
    else:
        return 'ログインに失敗しました。'
@route('/dashboard')
def dashboard():
    username = request.get_cookie('username')
    if username:
        return template('ダッシュボードへようこそ!ユーザー名: {{username}}', username=username)
    else:
        return 'ログインしてください。'
run(host='localhost', port=8080)

このコードでは、/loginにPOSTリクエストが送信された際に、ユーザー名とパスワードを取得し、正しい組み合わせであればクッキーにユーザー名を保存します。

その後、/dashboardにアクセスした際に、クッキーからユーザー名を取得し、ログイン状態を確認します。

サーバーサイドでのセッション管理

サーバーサイドでのセッション管理では、サーバー側にデータを保存し、それを利用してセッションを管理します。

Bottleフレームワークでは、bottle-sessionというサードパーティ製のライブラリを使ってサーバーサイドでのセッション管理を実現できます。

まず、bottle-sessionをインストールします。

pip install bottle-session

以下は、サーバーサイドでのセッション管理のサンプルコードです。


from bottle import route, run, request, response, template
from bottle.ext import session
app = Bottle()
plugin = session.SessionPlugin(cookie_lifetime=600)
app.install(plugin)
@route('/login', method='POST')
def login(session):
    username = request.forms.get('username')
    password = request.forms.get('password')
    if username == 'admin' and password == 'password':
        session['username'] = username
        return template('ログインに成功しました。ユーザー名: {{username}}', username=username)
    else:
        return 'ログインに失敗しました。'
@route('/dashboard')
def dashboard(session):
    username = session.get('username')
    if username:
        return template('ダッシュボードへようこそ!ユーザー名: {{username}}', username=username)
    else:
        return 'ログインしてください。'
run(app, host='localhost', port=8080)

このコードでは、bottle-sessionを使ってセッション管理を行っています。

/loginにPOSTリクエストが送信された際に、ユーザー名とパスワードを取得し、正しい組み合わせであればセッションにユーザー名を保存します。

その後、/dashboardにアクセスした際に、セッションからユーザー名を取得し、ログイン状態を確認します。

以上が、Bottleフレームワークでのセッション管理の方法です。

クッキーを使ったセッション管理は簡単に実装できますが、セキュリティ上のリスクがあるため、サーバーサイドでのセッション管理を検討することも重要です。

Bottleフレームワークでのエラーハンドリング

Webアプリケーション開発において、エラーハンドリングは重要な要素の一つです。

Bottleフレームワークでは、エラーページのカスタマイズや例外処理の実装が容易に行えます。

この章では、Bottleフレームワークでのエラーハンドリングについて解説します。

エラーページのカスタマイズ

Bottleフレームワークでは、errorデコレータを使ってエラーページをカスタマイズすることができます。

以下に、404エラー(ページが見つからない)と500エラー(サーバーエラー)のカスタマイズ例を示します。


from bottle import Bottle, error, run
app = Bottle()
@app.error(404)
def error404(error):
    return "404エラー:お探しのページは見つかりませんでした。"
@app.error(500)
def error500(error):
    return "500エラー:サーバーで問題が発生しました。"
if __name__ == "__main__":
    run(app, host="localhost", port=8080)

上記のコードでは、@app.error(エラーコード)というデコレータを使って、エラーコードに対応するエラーページを定義しています。

これにより、指定したエラーコードが発生した際に、カスタマイズしたエラーページが表示されます。

試しに上記コードを実行して、localhost:8080localhost:8080/sampleなど定義していない(存在しない)ページにアクセスしてみてください。

404エラーページに飛ばされる

404エラーのページが開かれるはずです。

例外処理の実装

Bottleフレームワークでは、Pythonの標準的な例外処理機能(tryexcept)を使って、エラーが発生した際の処理を実装することができます。

以下に、例外処理を用いたデータベース操作の例を示します。


from bottle import Bottle, route, run, template
import sqlite3
app = Bottle()
@app.route("/user/<user_id>")
def user_profile(user_id):
    try:
        conn = sqlite3.connect("users.db")
        c = conn.cursor()
        c.execute("SELECT * FROM users WHERE id=?", (user_id,))
        user = c.fetchone()
        conn.close()
        if user is not None:
            return template("user_profile", user=user)
        else:
            return "ユーザーが見つかりませんでした。"
    except sqlite3.Error as e:
        return f"データベースエラーが発生しました: {e}"
if __name__ == "__main__":
    run(app, host="localhost", port=8080)

上記のコードでは、tryブロック内でデータベース操作を行っています。

もしデータベース操作中にエラーが発生した場合、exceptブロック内の処理が実行され、エラーメッセージが表示されます。

このように、Bottleフレームワークではエラーハンドリングが容易に行えるため、安定したWebアプリケーションを開発することができます。

1 2 3 4 5

目次から探す