【问题标题】:Django- Clear user cache when user logged outDjango-用户注销时清除用户缓存
【发布时间】: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


    【解决方案1】:

    听起来您的信号尚未注册。如果 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'
    

    【讨论】:

    • 能否解释一下users/__init__.py中的配置default_app_config = 'user.apps.UserConfig'
    • 我的应用程序配置无法找到名为 users.apps 的模块,因为我的应用程序名称是 users。相反,我复制了我的接收器函数并将其保存在 users/__init__.py 文件中,现在它可以工作了。
    • user.apps.UserConfig 行基本上是&lt;folder&gt;.&lt;file&gt;.&lt;class&gt; 的点符号,其中类是AppConfig 的子类。如果没有看到完整的错误消息,我无法确定,但可能是其中一个名称不正确。试试users.apps.UsersConfig
    【解决方案2】:

    正如@bdoubleu 在他的回答中建议我的信号可能尚未注册,我尝试在 users/__init__.py 文件中定义我的接收器函数而不是 signals.py强>。

    这会导致每当用户从系统注销并清除相应用户的用户缓存时都会激活信号。

    这种方法很容易实现,确实解决了我的问题。我愿意接受任何其他比这种方法更好的建议。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-10
      • 2017-02-16
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 2014-05-30
      相关资源
      最近更新 更多