Top / Programming / Python / Django TIPS / セッションを使用する

セッションを使用する

セッションの使用方法を解説します。

セッションを有効にする

settings.pyを編集します。

project/
├__init__.py
├manage.py
├settins.py <-このファイルを編集します。
├urls.py
└app/
  ├__init__.py
  ├models.py
  └views.py

MIDDLEWARE_CLASSESに'django.contrib.sessions.middleware.SessionMiddleware'を追加します。

MIDDLEWARE_CLASSES = (
    …
    'django.contrib.sessions.middleware.SessionMiddleware',
    …
)

INSTALLED_APPSに'django.contrib.sessions'を追加します。

INSTALLED_APPS = (
    …
    'django.contrib.sessions',
    …
)

これらの設定は初期状態では有効になっています。

必要に応じてmanage.py syncdbを実行します。

python manage.py syncdb

セッション機能を使用しない場合は、これらの設定を外すことで、セッション機能を無効してオーバーヘッドを減らすことができます。

セッションにデータを保存する

セッションを使用するには、リクエストオブジェクトのsession属性を操作します。

セッションオブジェクトは辞書と同じように使用できます。

アンダースコアで始まるセッション辞書のキーは、Django内部で使用するために予約されています。

def index(request):
    …
    # セッションに保存する
    request.session['user_id'] = user_id

セッションからデータを読み込む

def index(request):
    …
    # セッションから読み込む
    user_id = request.session['user_id']

セッションのデータを削除する

def index(request):
    …
    # セッションのデータを削除
    del request.session['user_id']

セッションのキーの有無を調べる

def index(request):
    …
    # キーの有無を調べる
    if 'user_id' in request.session:

セッションをクリアする

def index(request):
    …
    # セッションをクリアする
    request.session.clear()

セッションオブジェクトの変更を通知する

セッションデータを変更した場合は、セッションデータベースは自動的に保存されます。

# 自動的に保存される例
request.session['foo'] = 'bar' #登録
del request.session['foo'] #削除

一方、セッション中のデータを変更した場合は、自動的には保存されません。
その場合は変更を通知する必要があります。

# 自動的に保存されない例
request.session['foo']['bar'] = 'baz'

変更を通知するには、セッションオブジェクトのmodified属性をTrueにします。

def index(request):
    …
    # セッションオブジェクトの変更を通知する
    request.session.modified = True

セッションを自動的に保存する

SESSION_SAVE_EVERY_REQUESTをTrueにすると、リクエストごとにセッションを保存するようになります。
セッションの変更を通知する必要がなくなります。

project/
├__init__.py
├manage.py
├settins.py <-このファイルを編集します。
├urls.py
└app/
  ├__init__.py
  ├models.py
  └views.py

SESSION_SAVE_EVERY_REQUESTをTrueにします。

SESSION_SAVE_EVERY_REQUEST = True

外部リンク

更新履歴