[英]Django- Clear user cache when user logged out
我正在使用django.core.cache
在缓存中存储与用户角色相关的数据。 用户角色在缓存中存储为键roles_<user.id>
。
每当用户从系统注销时,我想从缓存中删除roles_<user.id>
键。
我为此使用了user_logged_out auth 信号,但不知何故此信号不起作用(不删除缓存数据)。
我在signals.py中创建了一个接收器:
def clear_user_cache(sender, user, request, **kwargs):
cache.delete('roles_{}'.format(user.id))
user_logged_out.connect(clear_user_cache)
我的登出网址是:
url(r'^accounts/logout/', 'django.contrib.auth.views.logout', {'next_page': '/'}, name='auth_logout'),
在模板中注销:
<a class="dropdown-item" href="{% url 'auth_logout' %}"><i class="la la-sign-out"></i>{% trans 'Logout' %}</a>
当我点击注销按钮时,用户已注销但未清除缓存。 如果我尝试在信号接收器中打印一些语句,它们不会被打印出来。
我认为模板中的 url 可能导致了这个问题,所以我尝试将其更改为:
<a class="dropdown-item" href="/logout"><i class="la la-sign-out"></i>{% trans 'Logout' %}</a>
但仍然什么也没发生。
当用户注销时,如何使注销信号触发?
我正在使用 Django==1.8.18 和 python2.7
听起来您的信号尚未注册。 如果signals.py文件在user app中,那么你需要修改user/apps.py和user/__init__.py
您也可以通过在模型中导入来注册它们,但我认为这种方式更简洁一些。
# apps.py
from django.apps import AppConfig
class UserConfig(AppConfig):
name = 'user'
def ready(self):
from . import signals
# __init__.py
default_app_config = 'user.apps.UserConfig'
作为@bdoubleu在他的回答表明我的信号可能还没有被注册的,我尝试定义用户/ __ init__.py文件,而不是signals.py在我的接收器功能。
这导致每当用户从系统注销并且清除相应用户的用户缓存时激活信号。
这种方法很容易实现,确实解决了我的疑问。 我对任何其他比这种方法更好的建议持开放态度。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.