我在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"
我应该使用每个视图缓存吗?
答案 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)