Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django cache.clear()结束会话(注销)_Python_Django_Django Sessions_Django Cache - Fatal编程技术网

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

Python django cache.clear()结束会话(注销),python,django,django-sessions,django-cache,Python,Django,Django Sessions,Django Cache,我在Django中使用memcached来缓存整个站点 我在保存后信号处理程序方法中添加了一些代码,以便在模型中创建或更新某些对象时清除缓存 from proximity.models import Advert # Cache from django.core.cache import cache @receiver(post_save, sender=Advert) def save_advert(sender, instance, **kwargs): # Clear cac

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

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

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"
我应该使用每视图缓存吗

from django.contrib.auth import update_session_auth_hash

update_session_auth_hash(request, user)
清除缓存时,按上述方法传递请求和用户。但是按照你的方式。您正在清除没有请求的信号中的缓存。所以,如果你是更新广告模型从管理员然后。重写admin
save\u model()
方法进行保存,在这里您可以获得用户和请求,因此在清除缓存后调用上面的
update\u session\u auth\u 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)

“缓存整个站点”是什么还不清楚。我已经按照django文档中的描述缓存了整个站点,使用“django.middleware.cache.UpdateChemiddleware”和“django.middleware.cache.fetchFromCacheMidleware”在中间件级别更改请求。我已添加到文档的链接。清除缓存将清除所有保存的会话。您应该使用不同的会话后端或更改缓存的方式。你真的需要缓存每一个请求吗?谢谢@IainShelvington,我真正需要的是缓存一些DRF API调用,但我找不到一个简单的方法来实现,因为我不能使用decorator'@cache_page'。然后我缓存了整个站点,然后排除了一些页面。我可以使用哪些其他会话引擎?正在从CreateVIew创建对象。在保存对象和清除缓存之前,我已经重写了方法form\u valid并调用了update\u session\u auth\u hash(请求,用户),但用户仍然被注销。