Python Django-当用户注销时清除用户缓存
我正在使用Python Django-当用户注销时清除用户缓存,python,django,django-authentication,django-signals,Python,Django,Django Authentication,Django Signals,我正在使用django.core.cache在缓存中存储与用户角色相关的数据。用户角色作为键角色存储在缓存中 每当用户从系统注销时,我想从缓存中删除角色键 我使用了user\u logged\u outauth信号进行此操作,但不知何故,此信号不起作用(不删除缓存数据) 我在signals.py中创建了一个接收器,如下所示: def clear_user_cache(sender, user, request, **kwargs): cache.delete('roles_{}'.for
django.core.cache
在缓存中存储与用户角色相关的数据。用户角色作为键角色
存储在缓存中
每当用户从系统注销时,我想从缓存中删除角色
键
我使用了user\u logged\u outauth信号进行此操作,但不知何故,此信号不起作用(不删除缓存数据)
我在signals.py中创建了一个接收器,如下所示:
def clear_user_cache(sender, user, request, **kwargs):
cache.delete('roles_{}'.format(user.id))
user_logged_out.connect(clear_user_cache)
我的注销url是:
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(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应用程序中,则您需要修改user/apps.py和user/\uuuuuuuuuuuuuuuuuuuy 您也可以通过在模型中导入来注册它们,但我认为这种方式更干净一些
# 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在他的回答中指出的,我的信号可能没有被注册,我尝试在users/\uuu init\uuuuuuuuuuuuupy文件中定义我的接收器函数,而不是signals.py 这导致每当用户从系统注销并且清除相应用户的用户缓存时,信号被激活
这种方法很容易实现,并且确实解决了我的问题。我愿意接受比这种方法更好的任何其他建议。你能解释一下users/\uu init\uuuuu.py中的配置
default\u app\u config='user.apps.UserConfig'
吗?我的应用程序配置无法找到名为users.apps
的模块,因为我的应用程序名是users。相反,我复制了我的receiver函数,并将其保存在users/\uuuu init\uuuuu.py文件中,现在它开始工作了。user.apps.UserConfig
行基本上是的点符号。
其中类是AppConfig
的子类。如果没有看到完整的错误消息,我无法确定,但可能是其中一个名称不正确。尝试users.apps.UsersConfig