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

Problema com a Tela de Login

Quando eu tento fazer login sem inserir um usuáro registrado no banco acontece este erro 'NoneType' object is not subscriptable.

    def buscar_por_id(self, id):
        cursor = self.__db.connection.cursor()
        cursor.execute(SQL_USUARIO_POR_ID, (id,))
        tupla = cursor.fetchone()
        return Usuario(tupla[1], tupla[2], tupla[3], id=tupla[0])

   # ocutar restante do código 

def traduz_usuario(usuarios):
    def cria_usuario_com_tupla(tupla):
        return Usuario(tupla[1], tupla[2], tupla[3], id=tupla[0])
    return list(map(cria_usuario_com_tupla, usuarios))

Mas caso eu coloque um usuário valido, o condígo flui normalmente e passa pelo laço

@app.route('/autenticar', methods=['POST', ])
def autenticar():
    usuario = usuario_dao.buscar_por_usuario(request.form['usuario'])
    if usuario:
        if usuario.senha == request.form['senha']:
            session ['usuario_logado'] = usuario.id
            flash(usuario.nome + ' Logado com sucesso!')
            proxima_pagina =  request.form['proxima']
            return redirect(proxima_pagina)
        else: 
            flash('Usuario ou senha errados, porfavor tente novamente.')
            return redirect(url_for('login'))

Eu fiz algumas mudanças do código original do curso, mas o original do curso dava um erro igual, mas era referente quando inseria uma senha que não era registradado no banco de dado.

3 respostas

Oii Mateus, como você está?

Sinto muito pela demora em obter um retorno.

No trecho que você mostrou, na rota de autenticar possui um erro de indentação, ou seja, os recuos ou avanços(TABS) para reforçar a estrutura do código, para evidenciar qual trecho está dentro de qual.

O else de 'Usuario ou senha errados, porfavor tente novamente.' precisa de um recuo a esquerda, pois essa condição se refere a variável usuário não possuir um valor válido. Ou seja, se não possuir um usuário válido, caso ele não seja encontrado no banco, entre no else e retorne que há o usuário ou senha inválidos. Veja como fica a correção:

@app.route('/autenticar', methods=['POST', ])
def autenticar():
    usuario = usuario_dao.buscar_por_usuario(request.form['usuario'])
    if usuario:
        if usuario.senha == request.form['senha']:
            session ['usuario_logado'] = usuario.id
            flash(usuario.nome + ' Logado com sucesso!')
            proxima_pagina =  request.form['proxima']
            return redirect(proxima_pagina)
    else: 
        flash('Usuario ou senha errados, porfavor tente novamente.')
        return redirect(url_for('login'))

Após essa modificação, tente logar com um usuário inexistente no banco e verifique se obterá êxito.

Qualquer dúvida estou por aqui, tá bom?

Grande abraço!

Bom eu fiz a modificação no meu código original e o erro continou, a mensagem do flash não é exibida quando se insere um usuário invalido ou senha.

Exibe este erro.

ValueError: View function did not return a response

Na duvida eu fui testar o código original do curso, e o mesmo erro é exibido, porem só quando se insere um usuario registrado no campo de login, e com uma senha diferente registrada ao do Bando de Dados. É exibido esse mesmo erro.

solução!

Consegui resolver o erro, apenas inserir mais um laço elif.

    usuario = usuario_dao.buscar_por_id(request.form['usuario'])
    if usuario:
        if usuario.senha == request.form['senha']:
            session['usuario_logado'] = usuario.id
            flash(usuario.nome + ' logou com sucesso!')
            proxima_pagina = request.form['proxima']
            return redirect(proxima_pagina)
        elif usuario.senha != request.form['senha']:
            flash('Não logado, tente denovo!')
            return redirect(url_for('login'))
    else:
        flash('Não logado, tente denovo!')
        return redirect(url_for('login'))

Obrigado.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software