[Django] cookie情報の設定、取得方法
クラスベース
クラスベースビューから操作する場合はdispatch
メソッドをオーバーライドするのが一番お手軽だろう。
from datetime import datetime, timedelta
from django.views.generic import TemplateView
class MyView(TemplateView):
template_name = "path/to/template"
def dispach(self, request, *args, **kwargs):
request.COOKIES['KEY'] # クッキーの値の取得
response = super().dispach(request, *args, **kwargs)
max_age = 30 * 60 # 30分
expires = datetime.strftime(datetime.utcnow() + timedelta(seconds=max_age), "%a, %d-%b-%Y %H:%M:%S GMT")
response.set_cookie(key, value, max_age=max_age, expires=expires)
return response
set_cookie
メソッドでcookie
の値と有効期限を設定している。
汎用的に使える様にミックスインクラスにしてみる。
from datetime import datetime, timedelta
class CookieMixin:
_set_cookies = []
def dispach(self, request, *args, **kwargs):
response = super().dispach(request, *args, **kwargs)
for kw in self._set_cookies:
response.set_cookie(**kw)
self._set_cookies = []
return response
def get_cookie(self, key):
return self.request.COOKIES.get(key)
def set_cookie(self, key, **kwargs)
if 'expires' in kwargs.keys():
kwargs['expires'] = datetime.strftime(datetime.utcnow() + timedelta(seconds=max_age), "%a, %d-%b-%Y %H:%M:%S GMT")
self._set_cookies.append(dict(key=key, **kwargs))
以上、簡単にクラスベースのviewでcookieを取り扱ってみた。