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

O meu app não carrega, mesmo estando completamente sem erros

Não existe erros em minha aplicação, até tentei usar a do curso mesmo para conferir, mas a minha tela da lista simplesmente não carrega, apenas fica como: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Mas se eu tento usar páginas em que não utiliza a lista, como a tela novo e login, carrega como mostra na imagem a seguir:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Alguém poderia me auxiliar?

Os códigos corretos jogoteca:

from flask import Flask, render_template, request, redirect, session, flash, url_for from flask_sqlalchemy import SQLAlchemy

app = Flask(name) app.secret_key = 'alura'

app.config['SQLALCHEMY_DATABASE_URI'] = '{SGBD}://{usuario}:{senha}@{servidor}/{database}'.format( SGBD = 'mysql+mysqlconnector', usuario = 'root', senha = 'senha', servidor = 'localhost', database = 'jogoteca' )

db = SQLAlchemy(app)

class Jogos(db.Model): id = db.Column(db.Integer, primary_key=True, autoincrement=True) nome = db.Column(db.String(50), nullable=False) categoria = db.Column(db.String(40), nullable=False) console = db.Column(db.String(20), nullable=False)

def __repr__(self):
    return '<Name %r>' % self.name

class Usuarios(db.Model): nickname = db.Column(db.String(8), primary_key=True) nome = db.Column(db.String(20), nullable=False) senha = db.Column(db.String(100), nullable=False)

def __repr__(self):
    return '<Name %r>' % self.name

@app.route('/') def index(): lista = Jogos.query.order_by(Jogos.id) return render_template('lista.html', titulo='Jogos', jogos=lista)

@app.route('/novo') def novo(): if 'usuario_logado' not in session or session['usuario_logado'] == None: return redirect(url_for('login', proxima=url_for('novo'))) return render_template('novo.html', titulo='Novo Jogo')

@app.route('/criar', methods=['POST',]) def criar(): nome = request.form['nome'] categoria = request.form['categoria'] console = request.form['console']

jogo = Jogos.query.filter_by(nome=nome).first()

if jogo:
    flash('Jogo já existente!')
    return redirect(url_for('index'))

novo_jogo = Jogos(nome=nome, categoria=categoria, console=console)
db.session.add(novo_jogo)
db.session.commit()

return redirect(url_for('index'))

@app.route('/login') def login(): proxima = request.args.get('proxima') return render_template('login.html', proxima=proxima)

@app.route('/autenticar', methods=['POST',]) def autenticar(): usuario = Usuarios.query.filter_by(nickname=request.form['usuario']).first() if usuario: if request.form['senha'] == usuario.senha: session['usuario_logado'] = usuario.nickname flash(usuario.nickname + ' logado com sucesso!') proxima_pagina = request.form['proxima'] return redirect(proxima_pagina) else: flash('Usuário não logado.') return redirect(url_for('login'))

@app.route('/logout') def logout(): session['usuario_logado'] = None flash('Logout efetuado com sucesso!') return redirect(url_for('index'))

app.run(debug=True)

3 respostas

códigos corretos prepara_banco:

import mysql.connector from mysql.connector import errorcode

conn = None # Inicializa a variável 'conn'

print("Conectando...") try: conn = mysql.connector.connect( host='127.0.0.1', user='root', password='admin' ) except mysql.connector.Error as err: if err.errno == errorcode.ER_ACCESS_DENIED_ERROR: print('Existe algo errado no nome de usuário ou senha') else: print(err)

cursor = conn.cursor()

cursor.execute("DROP DATABASE IF EXISTS jogoteca;") cursor.execute("CREATE DATABASE jogoteca;") cursor.execute("USE jogoteca;")

criando tabelas

TABLES = { 'Jogos': ''' CREATE TABLE jogos ( id int(11) NOT NULL AUTO_INCREMENT, nome varchar(50) NOT NULL, categoria varchar(40) NOT NULL, console varchar(20) NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;''',

'Usuarios': '''
    CREATE TABLE `usuarios` (
        `nome` varchar(20) NOT NULL,
        `nickname` varchar(8) NOT NULL,
        `senha` varchar(100) NOT NULL,
        PRIMARY KEY (`nickname`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;'''

}

for tabela_nome in TABLES: tabela_sql = TABLES[tabela_nome] try: print('Criando tabela {}:'.format(tabela_nome), end=' ') cursor.execute(tabela_sql) except mysql.connector.Error as err: if err.errno == errorcode.ER_TABLE_EXISTS_ERROR: print('Já existe') else: print(err.msg) else: print('OK')

inserindo usuarios

usuario_sql = 'INSERT INTO usuarios (nome, nickname, senha) VALUES (%s, %s, %s)' usuarios = [ ("Harry", "HR", "alohomora"), ("Hashirama", "HS", "madara"), ("Rengoku", "RK", "chamas") ] cursor.executemany(usuario_sql, usuarios)

cursor.execute('select * from jogoteca.usuarios') print(' ------------- Usuários: -------------') for user in cursor.fetchall(): print(user[1])

inserindo jogos

jogos_sql = 'INSERT INTO jogos (nome, categoria, console) VALUES (%s, %s, %s)' jogos = [ ('Tetris', 'Puzzle', 'Atari'), ('God of War', 'Hack n Slash', 'PS2'), ('Mortal Kombat', 'Luta', 'PS2'), ('Valorant', 'FPS', 'PC'), ('Crash Bandicoot', 'Hack n Slash', 'PS2'), ('Need for Speed', 'Corrida', 'PS2'), ] cursor.executemany(jogos_sql, jogos)

cursor.execute('select * from jogoteca.jogos') print(' ------------- Jogos: -------------') for jogo in cursor.fetchall(): print(jogo[1])

commitando se não nada tem efeito

conn.commit()

cursor.close() conn.close()

solução!

Descobri qual o problema, a senha da minha 'root' do MySQL tinha @ e isso estava bugando na hora de entrar a senha para acesso ao servidor, alterei a senha e foi tranquilamente :), fica a dica caso alguém tenha um problema parecido!

Obrigado pela dica, Leonardo Fernandes. Eu estava com o mesmo problema!!