この記事では、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を使用する際の状態管理とデータストレージには多くの選択肢があります。プロジェクトのニーズに応じて最適な方法を選ぶことが重要です。
コメント