我正在使用消息框架来处理诸如登录用户成功消息之类的基本事情。一切正常。
但是,当用户注销时,它无法正常工作。我不是网络开发人员,所以对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">×</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>
[LogoutView
不是FormView
,因此在这里使用SuccessMessageMixin
毫无意义,因为它不会做任何事情
[LogoutView
调用logout
方法,并且the logout method calls request.session.flush()会在使用SessionStorage后端时删除任何消息]
您可以转到使用CookieStorage后端,因为我认为这不会受到request.session.flush
的影响,或者您可以覆盖dispatch
的LogoutView
方法,并在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