Solucionado (ver solução)
Solucionado
(ver solução)
10
respostas

Recuperar id do usuário

Tenho um método que retorna o id do funcionário

def get_perfil_logado(request):
    return Inscricao.objects.get(id=1)

E um que testa se o login é válido (esse método testa em um cadastro no banco mesmo, não quis criar com o User do Django)


def login_usuario(request):
    login = request.POST.get('matricula')
    senha = request.POST.get('senha')
    usuario = Inscricao.objects.get(matricula=login)
    if(usuario):
        if(usuario.senha  == senha):
            return HttpResponseRedirect('/lista_laboratorio')
        else:
            return render(request, 'invalid.html')

Como eu pego esse usuario e jogo lá no outro método?

Valeu!

10 respostas

Não estou entendendo. Você diz que seu metodo retorna id mas o nome dele é get_perfil_logado. Ele retorna o id do perfil ou o perfil? Não está claro para mim porque essa classe inscrição foi você quem criou.

Você quer invocar o método get_perfil_logado em login_usuario? Você quer o id ou perfil? Qual linha de login_usuario vc quer substituir pela chamada de get_perfil_ligado?

Desculpe...realmente não entendi.

Olá, Flavio. Realmente, acabei não explicando corretamente.

Bom, vamos lá:

Estou fazendo uma página para uma reserva de laboratórios da faculdade e pensei em fazer um método para login, que será efetivado através da matricula e uma senha, cadastradas em outro método (Inscricao). Só que, para eu reservar um laboratório, preciso pegar o id do usuario que está logado e, pra isso, preciso enviar o usuario para o método get_perfil_logado para que ele possa me retornar o id.

Acompanhando as aulas, vi que o django já fornece uma API pra essa questão de sessões, mas não a utilizei porque não estou criando o usuario na tabela padrão de Users do Django.

Enfim, resumindo, preciso passar um usuario para o método get_perfil_logado, esse usuario eu obtenho no método login_usuario. Queria que, quando testar a senha do usuario (no método login_usuario) ele jogue aquele usuario para o método get_perfil_logado

Obrigado

Deixa eu ver se entendi. No seu login_usuario você quer guardar "em algum lugar " o usuário que buscou do banco através do login e senha. Depois, você quer que "get_usuario_logado" retorne esse usuário que você guardou "em algum lugar", certo? Se for isso, você terá que usar sessão. A sessão do usuário persiste entre múltiplas requisições. Não vejo outra solução dentro do cenário que você está me passando (só se usar cookie, mas isso não é recomendado, é fácil burlar). Trabalhar com sessão do Django não necessariamente está vinculado ao trabalho com o model User do Django, sinta-se livre para usar a sessão para resolver problemas como o que você me apresentou. Porém, esteja preparado que para usar toda a infra de segurança e bloquei de acesso do Django você terá uma dor de cabeça enorme, já que não está usando o User do Django.

Acho que foi essa documentação de session que você viu:

https://docs.djangoproject.com/en/1.8/topics/http/sessions/

Tudo bem? Consegui entender seu problema?

Entendi. Vou dar uma olhada em Sessão.

Mas, como é um sistema bem simples, não sei se vale a pena. O professor nos passou apenas para aprender Django, já que será utilizado no restante da disciplina.

Bom, vou dar uma olhada na documentação.

Obrigado, Flavio!

solução!

Se você não quer usar sessão, no seu método login_usuario, assim que você pegar o usuário grava ele no banco. Depois em seu get_perfil_logado você busca ele no banco. Eu achei que isso é o que você não queria fazer. Isso resolve? Ah, não vai dar, porque o usuário seria fixo! Entendi! É sessão mesmo!

Poderia criar uma tabela usuario_logado para guardar o usuário que foi logado no momento e no get_perfil recuperar este usuario...

Pode, mas se você tiver mais de um usuário logado no sistema? Se for monousuário, é uma solução. Mas se é mono usuário, já deixa fixo o retorno do usuário.

Bom, como te falei, é um sistema apenas pra apresentar pro professor. Meio que mostrar que usamos Python e Django, como se fosse uma atividade mesmo. O sistema não seria utilizado fora do meu notebook...

Então Fagner, grava um usuário manualmente no banco. E no get_usuario_logado deixa fixo o ID dele para buscá-lo do banco sempre. Isso não resolve? Eu entendo que seu projeto é uma prova de conceito, pode ficar tranquilo :)

Vou fazer isso mesmo, Flavio.

Obrigado pela ajuda! :)