1
resposta

Contexto passado para django.shortcuts.redirect

Ao final da aula, temos a injeção do nome do usuário logado no html da página de dashboard:

<h1>Dashboard, olá {{ user.username }}</h1>

Mas, apesar de exisir dentro do contexto de login, essa variável não é passada na requisição:

def login(request):
    [corpo da função]     
    user = auth.authenticate(request, username=nome, password=senha)        
    return redirect('dashboard')

nem esperada pela view dashboard:

def dashboard(request):
    return render(request, 'usuarios/dashboard.html')

Fiz um teste passando uma variável aleatória dentro do corpo da função login, mas não consigo acessar da mesma forma que foi feito com user.username

1 resposta

Olá Leonel, tudo bem com você?

Peço desculpas pela demora em lhe responder.

Quando acessamos o nome do usuário no template dashboard.html estamos acessando a um usuário do modelo user do Django e não a variável user criada na rota login. Por isso o acesso ao nome de usuário só será possível se utilizado o código Python da seguinte forma: {{ user.username }}.

Para que um usuário fique disponível no template dashboard.html , foi utilizado a sessão do django, onde o usuário é adicionado a ela com o uso da função auth.login(). Essa função deve receber uma requisição (request) e um usuário que será inserido na sessão do django, no exemplo da aula é adicionado o usuário presente na variável user. Abaixo um exemplo.

auth.login(request, user)

Quando a linha de código acima é executada, o usuário presente na variável user é adicionado à sessão do django.

Acessando a rota de login presente no arquivo usuarios/views.py temos a seguinte declaração.

def login(request):
    # Código omitido
    user = auth.authenticate(request, username=nome, password=senha)
    if user is not None:
        auth.login(request, user)
        print('Login realizado com sucesso')
        return redirect('dashboard')

Nota: parte do código foi omitido por questões de didática.

No código acima, o usuário criado a partir do modelo user é autenticado na função authenticate() e atribuído a variável user. Após a autenticação, esse usuário é adicionado a sessão do django com o uso da função auth.login(). Logo após é realizado o redirecionamento a página de dashboard.

Com isso, através do uso de código Python podemos realizar o acesso ao usuário presente na sessão django. Basta informar que do modelo user queremos apresentar o conteúdo presente na coluna username, inserindo a seguinte linha de código {{ user.username }} no template dashboard.html.

Você pode acompanhar na aula Realizando o Login a partir do minuto 7:20 à adição e uso da função auth.login() no código da rota login.

Fico à disposição em caso de dúvidas.

Abraços e bons estudos.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!