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

Problemas com o login

Boa tarde, não estou conseguindo adaptar o que foi passado em aula. Alguém conseguiria me esclarecer sobre o meu erro?

erro:

AttributeError: 'Usuario' object has no attribute 'senha'

db:

mysql> select * from usuarios;
+----------+--------+
| nome     | senha  |
+----------+--------+
| Everton  | abc    |
| Cleiton  | def    |
| Fernanda | ghi    |
+----------+--------+

models:

class Usuario:
    def __init__(self, nome, senha):
        self.__nome = nome
        self.__senha = senha

html

<form method="POST" action="{{ url_for('autenticar') }}">
            <input type="hidden" name="proxima" value="{{ proxima or url_for('index') }}">
            <p><label>Nome de usuário:</label> <input class="form-control" type="text" name="usuario" required></p>
            <p><label>Senha:</label> <input class="form-control" type="password" name="senha" required></p>
            <p><button class="btn btn-primary" type="submit">Entrar</button></p>
        </form>

dao:

SQL_USUARIO_POR_NOME = 'SELECT nome, senha from usuarios where nome = %s'
class UsuarioDao:
    def __init__(self, db):
        self.__db = db

    def buscar_por_nome(self, nome):
        cursor = self.__db.connection.cursor()
        cursor.execute(SQL_USUARIO_POR_NOME, (nome,))
        dados = cursor.fetchone()
        usuario = traduz_usuario(dados) if dados else None
        return usuario

def traduz_usuario(tupla):
    return Usuario(tupla[0], tupla[1])

views:

def autenticar():
    usuario = usuario_dao.buscar_por_nome(request.form['usuario'])
    if usuario:
        if usuario.senha == request.form['senha']:
            session['usuario_logado'] = usuario.nome
            flash(usuario.nome + ' logou com sucesso!')
            proxima_pagina = request.form['proxima']
            return redirect(proxima_pagina)
    else:
        flash('Não logado, tente denovo!')
        return redirect(url_for('login'))
2 respostas
solução!

Olá Everton, o problema está na sua classe Usuario:

class Usuario:
    def __init__(self, nome, senha):
        self.__nome = nome
        self.__senha = senha

Os atributos estão privados e você não consegue acessar diretamente -- por este motivo acusa AttributeError dizendo que oUsuario não possui um atributo senha. Ou você torna eles públicos ou cria as properties para acessar cada um deles.

Puts, é verdade. Muito obrigado