DjangoでCookieを設定するときは response.set_cookie
を使います。
response = TemplateResponse(...) response.set_cookie("key", "value", max_age=3600)
今まで知らずに expires
も自分で計算して設定していましたが、 max_age
を指定して expires
を指定しない場合は勝手に設定されるので不要みたいです。
DjangoのHttpResponseBaseのset_cookieにこういう実装がありました(Django 2.1で確認)。
if max_age is not None: self.cookies[key]['max-age'] = max_age # IE requires expires, so set it if hasn't been already. if not expires: self.cookies[key]['expires'] = http_date(time.time() + max_age)
django/response.py at 2.1.7 · django/django · GitHub
なので、わざわざこういう関数を作る必要はないです。
from datetime import timedelta from django.utils import timezone def set_cookie(response, key, value, max_age): expires_at = timezone.now() + timedelta(seconds=max_age) expires = datetime.strftime(expires_at, "%a, %d-%b-%Y %H:%M:%S GMT") response.set_cookie(key, value, max_age=max_age, expires=expires)
ちゃんと実装を調べてよかった。