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.pyuser/\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