在注销视图上显示消息



我正在使用消息框架进行基本操作,例如用户登录时的成功消息。这工作正常。

但是,当用户注销时,我无法让它工作。我不是Web开发人员,所以对django不是特别强,所以不确定我做错了什么 - 有类似的问题: 注销时的 Django 消息 Django 如何使用 django.contrib.auth 添加注销成功消息? 使用信号的解决方案 - 在尝试之前,我想了解为什么我的代码不起作用。我显然错过了一些东西!

请注意,在我的模板中,我添加了一个条件,如果没有消息,则打印一些文本 - 此文本确实打印出来,因此我的消息.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')

消息.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 %}

在我的登录重定向和注销模板中.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>

LogoutView不是FormView所以在这里使用SuccessMessageMixin没有意义,因为它不会做任何事情

LogoutView调用logout方法,logout 方法调用 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

最新更新