【发布时间】:2019-07-18 09:46:20
【问题描述】:
我正在使用django.core.cache 将用户角色相关数据存储在缓存中。用户角色在缓存中存储为键 roles_<user.id>。
每当用户从系统注销时,我想从缓存中删除 roles_<user.id> 键。
我为此使用了 user_logged_out 身份验证信号,但不知何故此信号不起作用(不删除缓存数据)。
我在 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
【问题讨论】:
标签: python django django-authentication django-signals