Django всегда показывает одну и ту же страницу, когда вы переходите на 127.0.0.1:8000/admin/logout
, независимо от того, входили вы ранее или нет.
То, что я хочу, - это сообщение об успешном выходе из системы * только 1007 * , если пользователь был аутентифицирован ранее ; и показать сообщение об ошибке, если пользователь не прошел аутентификацию и попытается выйти из системы.
Мне также нужно включить имя пользователя в мое сообщение об успешном выходе из системы.
Я использую основанный на классах django.contrib.auth.views.LogoutView
вид так:
class SignoutView(LogoutView):
template_name = "users/signout.html"
def get_next_url(self):
redirect_to = self.request.GET.get("next", "/")
return redirect_to
и вот шаблон:
{% extends "base.html" %}
{% block content %}
<h1>Sign out Page</h1>
<br>
{% if was_authenticated %}
<div class="alert alert-success" role="alert">
<h4 class="alert-heading">You have logged out from your account {{first_name|capfirst}}!</h4>
<p>Thanks for spending some quality time with my web site today.</p>
<hr>
<p class="mb-0" id="displayTimer"></p>
</div>
{% else %}
<div class="alert alert-danger" role="alert">
<h4 class="alert-heading">Ooh no!</h4>
<p>Looks like you are not logged in! So you can not log out! Cool yeah?</p>
</div>
{% endif %}
{% endblock %}
{% block js %}
{% if was_authenticated %}
<script type="text/javascript">
var count = 5;
var url = "{{redirect_address}}";
var countdown = setInterval(function() {
$('#displayTimer').text("You will be redirected to the home page in " + count-- + " seconds...");
if (count < 0) {
$('#displayTimer').text("Redirecting....");
clearInterval(countdown);
$(location).attr("href", url);
}
}, 1000);
</script>
{% endif %}
{% endblock %}
Я добавляю дополнительный контент для просмотра следующим образом:
class SignoutView(LogoutView):
template_name = "users/signout.html"
def set_extra_context(self):
return {
'was_authenticated': self.request.user.is_authenticated,
'first_name': self.request.user.first_name,
}
def get_next_url(self):
redirect_to = self.request.GET.get("next", "/")
return redirect_to
но похоже, что функция будет запущена после процесса выхода из системы , поэтому was_authenticated
всегда будет False и first_name
всегда Нет .
Я знаю, как справиться с этой ситуацией с представлениями на основе функций , но я предпочитаю использовать представления на основе классов (если это возможно здесь!).
Заранее спасибо.