在LogoutView上显示消息

问题描述 投票:0回答:1

我正在使用消息框架来处理诸如登录用户成功消息之类的基本事情。一切正常。

但是,当用户注销时,它无法正常工作。我不是网络开发人员,所以对django的了解不是特别强,所以不确定我在做什么错-存在类似的问题:django message when logoutDjango How to add a logout successful message using the django.contrib.auth?使用信号的解决方案-在尝试之前,我想了解为什么下面的代码无法正常工作。我显然缺少什么!

注意,在我的模板中,我添加了一个条件,如果没有消息,则打印一些文本-该文本确实会打印出来,因此肯定包含我的messages.html。

views.py

class LogoutFormView(SuccessMessageMixin,LogoutView):
template_name = 'users/logout.html'
success_message = "Successfully logged out."

class login_view(SuccessMessageMixin,LoginView):
template_name = 'users/login.html'
success_message = "Successfully logged in."
def get_success_url(self):
    return reverse('recordings:projects')

messages.html

{% if messages %}
{% for message in messages %}
<div class="alert {{ message.tags }} alert-dismissible" role="alert">
    <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span
            aria-hidden="true">&times;</span> </button>
    {{ message }}
</div>
{% endfor %}
{% endif %}

在模板中,我的登录重定向和logout.html都扩展了:

<div class="container-fluid mt-3 pl-5 pr-5">
    {% block messages %}
    {% if messages %}
    test-messages
    {% else %}
    test-no-messages
    {% endif %}
    {% include "common/messages.html" %}
    {% endblock %}
</div>
python django django-views
1个回答
1
投票

[LogoutView不是FormView,因此在这里使用SuccessMessageMixin毫无意义,因为它不会做任何事情

[LogoutView调用logout方法,并且the logout method calls request.session.flush()会在使用SessionStorage后端时删除任何消息]

您可以转到使用CookieStorage后端,因为我认为这不会受到request.session.flush的影响,或者您可以覆盖dispatchLogoutView方法,并在request.session.flush之后添加消息被称为,尽管我不确定这是否行得通

def dispatch(self, request, *args, **kwargs):
    response = super().dispatch(request, *args, **kwargs)
    messages.add_message(request, messages.INFO, 'Successfully logged out.')
    return response
© www.soinside.com 2019 - 2024. All rights reserved.