[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を取り扱ってみた。

参考

http://y0m0r.hateblo.jp/entry/20120801/1343828616