Pyramidのセッション機能を使う(2)〜Beakerを使う〜

前回はPyramidのUnencryptedCookieSessionFactoryConfigを使ったセッションの利用方法を確認しました。
UnencryptedCookieSessionFactoryConfigでは、容量やセキュリティの面で実際のアプリケーション開発には使いづらいので、今回はBeakerというライブラリを使ったセッション管理を試してみます。
BeakerはPyramidに特化したものではなく、PythonのWebアプリケーションにセッション機能とキャッシュ機能を提供してくれるライブラリです。
これをPyramidで簡単に利用できるようにしてくれるラッパーが、pyramid_beakerです。

それぞれインストールしますが、pyramid_beakerをインストールすればBeakerもインストールされます。
pip install pyramid_beaker

それでは、Beakerを使ったセッション管理を実際にやってみます。
Beakerのセッション管理は、ファイルを使うものやデータベースを使うものがあります。
まずはファイルを使うセッション管理から。

(1)Beakerの設定
develepment.iniにBeakerの設定を以下のように記述します。

session.type = file
session.data_dir = %(here)s/data/sessions/data
session.lock_dir = %(here)s/data/sessions/lock
session.key = my_session
session.secret = mysecret
session.cookie_on_exception = true

セッショッン管理はファイルで行うため、type=fileとします。
また管理ファイルの置き場所を、data_dirとlock_dirで指定します。
keyはcookie名です。
secretは、符号化のためのキーワードです。
他にもパラメータはありますが、最低限上記があれば動作します。

(2)SessionFactoryの指定
アプリケーション起動時にSessionFactoryを指定します。

ライブラリをimportします。
from pyramid_beaker import session_factory_from_settings

main関数内で、以下のようにsessionFactoryを設定します。

config = Configurator(settings=settings)
config.include('pyramid_beaker')

または、以下のようにしても同じです。

my_session_factory = session_factory_from_settings(settings)
config = Configurator(settings=settings)
config.set_session_factory(my_session_factory)

(3)動作確認
前回、UnencryptedCookieSessionFactoryConfigの動作確認で使ったものをそのまま使います。
__init__.pyだけ、上記(1)(2)のように修正してセッショッン管理をBeakerに置き換えました。
何の問題もなく動作しました。

セッショッ管理の仕組みをUnencryptedCookieSessionFactoryConfigからBeakerに変更してもアプリケーション側でのセッション利用方法はまったく変わりません。ISessionインタフェースに乗っ取っているので当たり前ではありますが。。

次に、データベースを用いたセッション管理を確認します。
これはiniファイルの設定を以下のようにするだけです。

session.type = ext:database
session.url = (データベース接続設定)
session.lock_dir = %(here)s/data/sessions/lock
session.key = my_session
session.secret = mysecret
session.cookie_on_exception = true

データベースを使うには、type=ext:databaseとします。
urlはデータベースへ接続するための接続情報でSQLAlchemyを介して接続します。SQLAlchemyと同様な形式で設定しましょう。
動作確認をしてみます。問題無く動きました。

ちなみにBeakerでデータベースを使う場合は、最初に実行したときにデータベースに以下のテーブルが作成されます。
beaker_cache

以上のように、Beakerを使ってもセッション管理が簡単にできますね。
セッション管理のライブラリは他にもいろいろあるようですので試してみてください。

次回はセッション管理に付属しているCSRF対策の機能を紹介します。