depois dessa aula, meu login fica informando que está autenticado e que não pode ver a galeria.
Alguém sabe informar como corrigir ?
depois dessa aula, meu login fica informando que está autenticado e que não pode ver a galeria.
Alguém sabe informar como corrigir ?
Olá, Daniele. Como vai?
Esse comportamento é um clássico problema de conflito de fluxo ou persistência de mensagens na sessão do Django. Analisando a imagem que você compartilhou, podemos notar dois problemas acontecendo simultaneamente no topo da tela: a mensagem de sucesso de login para o usuário "bruno" aparece ao mesmo tempo que a mensagem informando que o usuário não está logado.
Isso geralmente acontece por dois motivos principais no código das suas views ou no seu template: as mensagens antigas não estão sendo limpas corretamente ou a verificação do estado de autenticação (user.is_authenticated) na rota da galeria está deixando passar alguma condição antiga.
Para corrigir isso, precisamos checar dois pontos principais no seu projeto:
O Django armazena as mensagens na sessão e as exibe na próxima requisição. Se o loop de exibição no seu template HTML não estiver consumindo as mensagens corretamente, elas podem acabar acumulando e aparecendo juntas.
Verifique no seu arquivo HTML (geralmente no base.html ou onde a barra de navegação/alertas fica) se a estrutura do loop está parecida com esta:
{% if messages %}
{% for message in messages %}
<div class="alert alert-{{ message.tags }}">
{{ message }}
</div>
{% endfor %}
{% endif %}
Garantir que as mensagens sejam iteradas corretamente faz com que o Django as limpe automaticamente da sessão após a exibição.
Outro ponto crítico é a lógica dentro do arquivo views.py na função responsável pelo login. Certifique-se de que, após o método auth.login(request, user) ser executado com sucesso, a requisição seja redirecionada imediatamente utilizando redirect, e não apenas renderizada com render.
Se você usar render logo após o login, o estado do usuário na requisição atual pode não se atualizar corretamente para o template. O código ideal deve seguir este padrão:
from django.shortcuts import render, redirect
from django.contrib import auth
from django.contrib import messages
def login(request):
# ... código de validação do formulário ...
if formulario.is_valid():
nome = formulario['nome_login'].value()
senha = formulario['senha'].value()
usuario = auth.authenticate(request, username=nome, password=senha)
if usuario is not None:
auth.login(request, usuario)
messages.success(request, f"{nome} logado com sucesso!")
return redirect('index') # Altere para a sua rota da galeria ou home
else:
messages.error(request, "Erro ao efetuar login")
return redirect('login')
Na barra de navegação, onde exibe o texto "Usuário não logado", verifique se você colocou a tag condicional do Django corretamente para ocultar essa mensagem quando houver um usuário ativo:
{% if request.user.is_authenticated %}
<p>Olá, {{ request.user.username }}</p>
{% else %}
<p>Usuário não logado. Faça login para acessar a galeria</p>
{% endif %}
Dê uma olhada nesses três pontos no seu código, salve as alterações e faça um teste limpando o cache do navegador ou testando em uma aba anônima para garantir que nenhuma sessão antiga interfira no comportamento.
Espero que possa ter lhe ajudado!