Отключение не происходит
Я хочу настроить отключение. У меня есть страница, Страница 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.