【问题标题】:django message when logout注销时的django消息
【发布时间】:2012-07-09 11:13:21
【问题描述】:

一旦用户退出站点,它应该重定向到主页并在页面顶部显示“U 已成功退出”消息。有人帮我在主页显示消息吗?

【问题讨论】:

  • 试试把settings.MESSAGE_STORAGE改成'django.contrib.messages.storage.cookie.CookieStorage',有用吗?

标签: django


【解决方案1】:

试一试:

from django.contrib.auth.views import LogoutView

class YourCustomLogoutView(LogoutView):

    def get_next_page(self):
        next_page = super(YourCustomLogoutView, self).get_next_page()
        messages.add_message(
            self.request, messages.SUCCESS,
            'You successfully log out!'
        )
        return next_page

在网址中:

url(r'^logout/$', YourCustomLogoutView.as_view(), {'next_page': settings.LOGOUT_REDIRECT_URL}, name='logout'),

【讨论】:

  • 我阅读了源代码并得出了相同的解决方案。但是方法名称get_next_page 现在比名称所暗示的要多。我希望我们可以覆盖另一个方法而不是 get_next_page
【解决方案2】:

您可以将 user_logged_out 信号与消息框架结合使用:

首先,确保设置了消息框架 (https://docs.djangoproject.com/en/dev/ref/contrib/messages/)。

然后将此代码包含在将被调用的某个地方(我倾向于将其放在 receivers.py 模块中,然后从已安装应用程序中的 models.py 文件中导入它):

from django.contrib.auth.signals import user_logged_out
from django.dispatch import receiver
from django.contrib import messages


@receiver(user_logged_out)
def on_user_logged_out(sender, request, **kwargs):
    messages.add_message(request, messages.INFO, 'Logged out.')

【讨论】:

  • 不适用于 Django 2.2.10。消息添加到刚刚注销的用户,所以不会在匿名的LOGOUT_REDIRECT页面弹出
【解决方案3】:

尝试使用会话。可以更简单。

在注销视图中,在会话变量中设置一个条目,例如session['just_logged_out'] = True,然后在主页视图中检查该变量。

try:
  just_logged_out = request.session.get('just_logged_out',False)
except:
  just_logged_out = False

在模板中,可以使用

{% if just_logged_out %}  You are successfully logged out {% endif %}

【讨论】:

    【解决方案4】:

    【讨论】:

    • 我在保存后尝试了代码 messages.add_message(request, messages.INFO, 'Hello world.')。但消息未显示
    • 您需要添加代码以在模板中显示消息。阅读我发布的链接中的文档。
    【解决方案5】:

    这是来自@andilabs 的答案的简化版本:

    from django.contrib import messages
    from django.contrib.auth.views import LogoutView
    
    class UserLogoutView(LogoutView):
        def dispatch(self, request, *args, **kwargs):
            if request.user.is_authenticated:
                messages.info(request, "You have successfully logged out.")
            return super().dispatch(request, *args, **kwargs)
    

    在你的 urls.py 中:

    path('logout/', views.UserLogoutView.as_view(), name='logout')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-25
      • 1970-01-01
      • 1970-01-01
      • 2019-08-01
      • 1970-01-01
      • 2011-06-08
      • 2016-03-10
      相关资源
      最近更新 更多