Flaskで状態管理とストレージを効率的に行う方法

この記事では、PythonのFlaskフレームワークを使用して状態管理とストレージを効率的に行う方法について解説します。具体的なコード例とその解説、応用例を含めています。

目次

状態管理の基本

Flaskで状態管理を行うためには、いくつかの方法が存在します。ここでは主にセッションとクッキーに焦点を当てます。

セッションの使用方法

セッションを使うと、ユーザー固有の情報を一時的に保管できます。

from flask import Flask, session

app = Flask(__name__)
app.secret_key = 'mysecretkey'

@app.route('/')
def index():
  session['user'] = 'Taro'
  return 'Session set'
  
@app.route('/get')
def get_session():
  user = session.get('user')
  return f'User is {user}'

この例では、ルートURLにアクセスするとセッションに’user’というキーで’Taro’という値が設定されます。`/get`にアクセスすると、セッションからその値を取り出して表示します。

クッキーの使用方法

クッキーもまた、短期間の状態管理に使用されます。

from flask import Flask, request, make_response

app = Flask(__name__)

@app.route('/')
def index():
  resp = make_response('Set cookie')
  resp.set_cookie('my_cookie', 'cookie_value')
  return resp
  
@app.route('/get')
def get_cookie():
  value = request.cookies.get('my_cookie')
  return f'Cookie value is {value}'

ストレージの選択肢

SQLiteの利用

SQLiteは軽量で設定が容易なデータベースです。

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
db = SQLAlchemy(app)

class User(db.Model):
  id = db.Column(db.Integer, primary_key=True)
  username = db.Column(db.String(20), unique=True)
  
  def __repr__(self):
    return f"User('{self.username}')"

MySQLの利用

MySQLは、より大規模なデータストレージに適しています。

# 同じくFlaskとSQLAlchemyを使いますが、URIが異なります。
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://username:password@localhost/db_name'

応用例

セッションタイムアウトの設定

セッションの有効期限を設定することもできます。

from datetime import timedelta

app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(minutes=5)

キャッシュの活用

キャッシュを活用して、より高速なデータ取得を実現します。

from flask_caching import Cache

app = Flask(__name__)
cache = Cache(app, config={'CACHE_TYPE': 'simple'})

@cache.cached(timeout=50)
@app.route('/cached_route')
def cached_route():
  return 'This is a cached route.'

まとめ

Flaskを使用する際の状態管理とデータストレージには多くの選択肢があります。プロジェクトのニーズに応じて最適な方法を選ぶことが重要です。

コメント

コメントする

目次