Я работаю над проектом Django, в котором реализовал аутентификацию пользователей с функциями профиля и выхода из системы. Проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь получить доступ к профилю или ссылкам выхода из системы с панели навигации, она перенаправляет меня на страницу входа вместо перехода к профилю пользователя или выполнения выхода из системы.
Ссылка на профиль:
следует перейти на страницу профиля пользователя, если пользователь вошел в систему.
Ссылка для выхода:
Необходимо выйти из системы и перенаправить пользователя на домашнюю страницу.
Текущая настройка:
Шаблоны (base.html):
Код: Выделить всё
{% if logged_in %}
[url=#]
{{ customer_name }}
[/url]
[list]
[*][url={% url ]Profile[/url]
[*][url={% url ]Logout[/url]
[/list]
{% else %}
[url={% url ]Login[/url]
{% endif %}
Код: Выделить всё
from django.shortcuts import redirect, render
from django.contrib.auth import authenticate, login as auth_login, logout as auth_logout
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from .models import costumer
@login_required
def profile_view(request):
email = request.GET.get('email')
if email:
try:
user = costumer.objects.get(email=email)
if user.id == request.session.get('customer_id'):
return render(request, 'profile.html', {'user': user})
else:
return redirect('index')
except costumer.DoesNotExist:
return redirect('index')
else:
return redirect('index')
def logout_view(request):
request.session.flush()
auth_logout(request)
return redirect('index')
def login_view(request):
if request.method == 'POST':
email = request.POST.get('email')
password = request.POST.get('password')
try:
customer = costumer.objects.get(email=email)
if customer.check_password(password):
request.session['customer_id'] = customer.id
request.session['logged_in'] = True
request.session['customer_name'] = f"{customer.first_name} {customer.last_name}"
request.session['customer_email'] = customer.email
messages.success(request, "Logged in!!")
return redirect('index')
else:
messages.error(request, 'Incorrect password')
except costumer.DoesNotExist:
messages.error(request, 'Email not found')
return render(request, 'login.html')
Код: Выделить всё
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
path('login/', views.login_view, name='login'),
path('logout/', views.logout_view, name='logout'),
path('profile/', views.profile_view, name='profile'),
]
- Переменные сеанса устанавливаются в login_view и очищено в logout_view.
- Распечатываются данные сеанса в разных представлениях, чтобы убедиться, что customer_id и customer_name установлены правильно.
- Замечено, что при нажатии на ссылку профиля или выхода из системы всегда перенаправляет на страницу входа.
Не могли бы вы помочь мне выяснить, почему происходит перенаправление этих ссылок? на страницу входа вместо отображения профиля или правильного выхода из системы? В частности, мне нужна помощь в проверке обработки сеанса и обеспечении правильного перенаправления.
Подробнее здесь: https://stackoverflow.com/questions/787 ... r-user-log