セッション - Django

セッションを使うための設定

settings.py の以下の項目がセッションを利用するための設定です。

SESSION_ENGINE は、最初は書かれていないため、追記します。

pythonApp\env\django_app\django_app\settings.py

INSTALLED_APPS = [
    ...
    'django.contrib.sessions',
    ...
]

MIDDLEWARE = [
    ...
    'django.contrib.sessions.middleware.SessionMiddleware',
    ...
]

SESSION_ENGINE = 'django.contrib.sessions.backends.cache'

セッションを使う

pythonApp\env\django_app\hello\forms.py

from django import forms

class SessionForm(forms.Form):
  session = forms.CharField(label='session', required=False, widget=forms.TextInput(attrs={'class':'form-control'}))

pythonApp\env\django_app\hello\views.py

from django.shortcuts import render
from django.views.generic import TemplateView

from .forms import SessionForm

# Create your views here.
class HelloView(TemplateView):
  
  def __init__(self):
    self.params = {
      'value': None,
      'form': SessionForm()
    }
  
  def get(self, request):
    self.params['value'] = request.session.get('last_msg', 'No message.')
    return render(request, 'hello/index.html', self.params)

  def post(self, request):
    se = request.POST['session']
    self.params['value'] = se
    request.session['last_msg'] = se
    self.params['form'] = SessionForm(request.POST)
    return render(request, 'hello/index.html', self.params)

セッションのメソッド

セッションに値を補完する

request.session['name'] = 'Taro'

値を取得する

request.session.get('name', 'default_value')

値を取得しセッションから取り除く

request.session.pop('name', 'default_value')

セッションのすべてのキー/値を取得する

request.session.keys()
request.session.items()

セッションのすべての値を削除する

request.session.clear()
request.session.flush()

保持時間を設定する

以下の場合は、5分後にセッションを破棄します。

request.session.set_expiry(300)