Отключение не происходит

Я хочу настроить отключение. У меня есть страница, Страница 1, которая доступна только для аутентифицированного пользователя. Когда я отсоединяюсь, я все еще могу получить доступ к странице 1. И у меня есть еще один вопрос: Как Django узнает, что нужно выполнить функцию logout_user? (У меня такой же вопрос для логина, но поскольку он работает, я не задавал себе этот вопрос ^^). И почему мы указываем перенаправление в возврате, когда в html мы уже указываем перенаправление?

appIdentification/views.py

from django.contrib.auth import authenticate, login, logout
def logout_user(request):
    logout(request)
    messages.success(request, ("You Were Logged Out!"))
    return redirect('home')

appIdentification/urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('/login', views.login_user, name="login"),
    path('', views.logout_user, name="logout"),
]

mainApp/template/mainApp/page1.html

<body>
    <h1> PAGE 1 </h1>
    {% if user.is_authenticated %}
    <a href="{% url 'login' %}"> Logout </a>
    {% endif %}
</body>

mainApp/views.py

@login_required
def page1(request):
    return render(request, 'mainApp/p1.html', {})

mainApp/urls.py

from django.urls import path, include
from . import views
path('mainApp', include('django.contrib.auth.urls')),
path('mainApp', include('appIdentification.urls')),
path('home', views.home, name="home"),
path('p1', views.page1, name="p1"),

Ответ на вашу первую проблему

У меня есть страница, Страница 1, которая доступна только для аутентифицированного пользователя. Когда я отключаюсь, я все еще могу получить доступ к странице 1.

Потому что вы указали неправильный url для выхода из системы, он должен быть

<a href="{% url 'logout' %}"> Logout </a>

вместо

<a href="{% url 'login' %}"> Logout </a>

и на ваш второй вопрос

Как Django узнает, что нужно выполнить функцию logout_user ?

Django использует MVT паттерн, в основном, когда вы переходите по некоторому url, например. /logout/ вызывается представление, сопоставленное с этим url, например. logout_user() и если вашему представлению требуются какие-либо данные из модели, то оно получает их из вашей модели.

Ответ на ваш последний вопрос

А зачем мы указываем перенаправление в возврате, если в html мы уже указали перенаправление?

поскольку это Post/Redirect/Get шаблон проектирования веб-разработки

Когда веб-форма отправляется на сервер через запрос HTTP POST, попытки обновить ответ сервера могут привести к повторной отправке содержимого исходного POST, что может привести к нежелательным результатам, таким как дублирование веб-покупки. Некоторые браузеры снижают этот риск, предупреждая пользователя о том, что он собирается повторно отправить запрос POST.

Вернуться на верх