Django的Session模型是否可用于memcached会话?

时间:2012-10-25 19:58:35

标签: django

最近我们从django的默认数据库会话切换到了memcached会话。

我们一直在使用contrib会话模型根据session_key删除会话:https://github.com/django/django/blob/master/django/contrib/sessions/models.py

Session.objects.get(session_key=key).delete()

一旦我们切换到memcached会话,上面的查询就会引发一个DoesNotExist异常。

Django的Session模型是否可用于memcached会话?如果是这样,解决方案是什么?

2 个答案:

答案 0 :(得分:3)

Django提供了一个django.contrib.sessions.backends.cache会话后端,只要缓存配置正确,它就可以实现你所需要的。

正如您自己所建议的那样,Session后端使用db模型。要使用cache后端,您可以执行以下操作(以便继续使用API​​并使代码能够在未来进行验证)。

from django.contrib.sessions.backends.cache import SessionStore
session = SessionStore(session_key)
session.delete()

这就是在Sessions middleware中完成的 此方法应该适用于后端,如果您决定将来移动到另一个后端,这可能是首选行为。

答案 1 :(得分:1)

mc = memcache.Client(settings.CACHE_BACKEND[:-1].split('//')[1].split(';'))
mc.delete(str(key))