gpt4 book ai didi

python - Django-当用户注销时清除用户缓存

转载 作者:行者123 更新时间:2023-12-01 07:33:54 25 4
gpt4 key购买 nike

我正在使用django.core.cache将用户角色相关数据存储在缓存中。用户角色存储为键 roles_<user.id>在缓存中。

我想删除 roles_<user.id>每当用户从系统注销时,都会从缓存中获取 key 。

我为此使用了 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>

当我点击注销按钮时,用户已注销,但缓存并未被清除。如果我尝试在信号接收器中打印一些语句,它们不会被打印。

我虽然模板中的网址可能导致了这个问题,所以我尝试将其更改为:

<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/__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'

关于python - Django-当用户注销时清除用户缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57091648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com