django cache.clear()结束会话(注销)

时间:2017-06-13 11:59:15

标签: python django django-sessions django-cache

我在Django中使用memcached来缓存整个网站。

https://docs.djangoproject.com/en/1.11/topics/cache/#the-per-site-cache

我在保存后信号处理程序方法中添加了一些代码,以便在模型中创建或更新某些对象时清除缓存。

from proximity.models import Advert

# Cache
from django.core.cache import cache

@receiver(post_save, sender=Advert)
def save_advert(sender, instance, **kwargs):
    # Clear cache
    cache.clear()

不幸的是,现在在创建新对象后,用户将被注销。

我认为原因可能是我在缓存会话。

# Cache config
CACHE_MIDDLEWARE_SECONDS = 31449600 #(approximately 1 year, in seconds)
CACHE_MIDDLEWARE_KEY_PREFIX = COREAPP
CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.memcached.MemcachedCache",
        "LOCATION": "127.0.0.1:11211",
    }
}
SESSION_ENGINE = "django.contrib.sessions.backends.cache"

我应该使用每个视图缓存吗?

1 个答案:

答案 0 :(得分:0)

from django.contrib.auth import update_session_auth_hash

update_session_auth_hash(request, user)
清除缓存时,

在上面的方法中传递请求和用户。但按照你的方式。您正在清除没有请求的信号中的缓存。因此,如果您正在从管理员更新广告模型。覆盖管理save_model()方法以保存,在这里您可以获得用户和请求,因此在清除缓存后调用update_session_auth_hash以上。它不会注销用户。如果您从自己的视图更新数据,则使用相同的方法来调用继续用户登录的方法。

修改

def form_valid(self, form)
    user = self.request.user
    form.save()  # When you save then signal will call that clear your cache
    update_session_auth_hash(self.request, user)