После нажатия кнопки выхода приложение переводит меня на пустую страницу
После нажатия кнопки выхода приложение переадресует меня на https://it-company-task-manager-uzrc.onrender.com/accounts/login/
Но есть пустая страница, и после выхода из системы я все еще вхожу в систему и могу выполнять действия (создавать задания и т.д.)
Я пытался решить эту проблему разными способами, но ничего не меняется. Вы можете проверить это самостоятельно: https://it-company-task-manager-uzrc.onrender.com
sidebar.html:
<li class="">
<a href="{% url 'login' %}" class="icon">
<i class="fa-solid fa-right-from-bracket"></i>
<span class="ml-4">Log out</span>
</a>
</li>
login.html:
{% extends "base.html" %}
{% load static %}
{% block login %}
<section class="login-content">
<div class="container">
<div class="row align-items-center justify-content-center height-self-center">
<div class="col-lg-8">
<div class="card auth-card">
<div class="card-body p-0">
<div class="d-flex align-items-center auth-content">
<div class="col-lg-6 bg-primary content-left">
<div class="p-3">
<h2 class="mb-2 text-white">Sign In</h2>
<p>Login to stay connected.</p>
{% if form.non_field_errors %}
{{ form.non_field_errors }}
{% endif %}
<form action="{% url 'login' %}" method="post">
{% csrf_token %}
<div class="row">
<div class="col-lg-12">
<div class="floating-label form-group">
{% if form.username.errors %}
{{ form.username.errors }}
{% endif %}
<input class="floating-input form-control" type="text" name="username" placeholder="Username">
</div>
</div>
<div class="col-lg-12">
<div class="floating-label form-group">
{% if form.password.errors %}
{{ form.password.errors }}
{% endif %}
<input class="floating-input form-control" type="password" name="password" placeholder="Password">
</div>
</div>
</div>
<input type="hidden" name="next" value="{{next}}" />
<button type="submit" class="btn btn-white">Sign In</button>
</form>
</div>
</div>
<div class="col-lg-6 content-right">
<img src="{% static 'images/login/01.png' %}" class="img-fluid image-right" alt="">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
{% endblock %}
настройки:
LOGIN_REDIRECT_URL = "/"
LOGOUT_REDIRECT_URL = "/accounts/login/"
Урлы:
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
from django.views.generic import RedirectView
urlpatterns = [
path("admin/", admin.site.urls),
path("accounts/", include("django.contrib.auth.urls")),
path("", RedirectView.as_view(url="tasks/", permanent=True)),
path("tasks/", include("task.urls", namespace="task")),
path("employees/", include("employee.urls", namespace="employee"))
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
1) Попробуйте это.
path("", RedirectView.as_view(url="/tasks", permanent=True)),
2) И,
<a href="{% url 'login' %}" class="icon">
это неправильно.
Разве это не должно быть
<a href="{% url 'logout' %}" class="icon">
Если вы используете Django 5, возможно, вы столкнулись с той же проблемой, которая рассматривается в этих вопросах:
- Django встроил представление Logout `Method Not Allowed (GET): /users/logout/` .
- Проблема с LogoutView на основе класса Django в Django 5.0
По сути, вы больше не можете получить доступ к встроенному представлению logout
с помощью запроса GET
; вы должны сделать это с помощью запроса POST
.
Итак, как предлагает willeM_ Van Onsem в первой ссылке выше, вам нужно обернуть вашу кнопку выхода из системы в небольшую форму:
<form method="post" action="{% url 'logout' %}">
{% csrf_token %}
<button type="submit">logout</button>
</form>
В моем Django-приложении запрос POST
к стандартной конечной точке Django-стандарта '/logout'
приведет к выходу пользователя из системы и перенаправлению на шаблон 'logged_out.html'
, который, возможно, уже есть у вас вместе с остальными шаблонами регистрации (или вы используете тот, который уже поставляется с Django).