セッションの使用方法を解説します。
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