Django 向 auth_view 添加消息

Posted

技术标签:

【中文标题】Django 向 auth_view 添加消息【英文标题】:Django add message to auth_view 【发布时间】:2018-08-29 23:19:33 【问题描述】:

是否可以在 urls.py 中传递 Flash 消息和路径?

由于我没有将auth_views 写入我的核心views.py 文件,我认为可能有一种简单的方法可以将它与请求一起传递。我更喜欢使用开箱即用的 auth_views,以便轻松更新我的 Django 版本。如果这是不可能的,那么我不会试图强迫它。检查了documentation,但没有找到任何关于消息的信息。

path('logout/', auth_views.logout, 'next_page': auth_views.login, name='logout'),

我想传递类似于下面的消息的内容,这样他们就不会觉得他们意外点击了登录或其他什么。

'messages.success(request, 'You have securely logged out of request.user.email. Thank you for visiting.')

【问题讨论】:

【参考方案1】:

Django 有一个信号,您应该能够连接到该信号以执行此操作;

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, user, **kwargs):
    if user:
        msg = 'You have securely logged out email. Thank you for visiting.'.format(email=user.email)
    else:
        msg = 'You have securely logged out. Thank you for visiting.'
    messages.add_message(request, messages.INFO, msg)

【讨论】:

谢谢 =) 我现在正在处理这个问题。有趣的是,当消息尝试运行时,用户对象不再可用,因此 else: 正在运行。 @HashRocketSyntax 我认为可能是这种情况,因为这是在注销之后。

以上是关于Django 向 auth_view 添加消息的主要内容,如果未能解决你的问题,请参考以下文章

Django Channels - 当组成员时无法直接向频道发送消息

如果不安装django.contrib.messages.middleware.MessageMiddleware,则无法添加消息

通过 celery 向 django-channels 发送消息

如何使用 Django Channels 3.0.0 向所有消费者发送消息?

如何从 Django 模型(覆盖)save() 函数向视图发送警报或消息?

Python Django:在数据库save()上从服务器向客户端发送消息