Desmembrar o arquivo views.py
para dois arquivos: views_game.py
e views_user.py
.
Arquivo views_game.py
from flask import render_template, request, redirect, session, flash, url_for, send_from_directory
from jogoteca import app, db
from models import Jogos
from helpers import recupera_imagem, deleta_arquivo, FormularioJogo
import time
@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')))
form = FormularioJogo()
return render_template('novo.html', titulo='Novo Jogo',
form=form)
@app.route('/criar', methods=['POST', ])
def criar():
form = FormularioJogo(request.form)
if not form.validate_on_submit():
return redirect(url_for('novo'))
nome = form.nome.data
categoria = form.categoria.data
console = form.console.data
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()
arquivo = request.files['arquivo']
upload_path = app.config['UPLOAD_PATH']
timestamp = time.time()
arquivo.save(f'{upload_path}/capa{novo_jogo.id}-{timestamp}.jpg')
return redirect(url_for('index'))
@app.route('/editar/<int:id>')
def editar(id):
if 'usuario_logado' not in session or session['usuario_logado'] == None:
return redirect(url_for('login', proxima=url_for('editar')))
jogo = Jogos.query.filter_by(id=id).first()
form = FormularioJogo()
form.nome.data = jogo.nome
form.categoria.data = jogo.categoria
form.console.data = jogo.console
capa_jogo = recupera_imagem(id)
return render_template('editar.html', titulo='Editando Jogo', id=id,
capa_jogo=capa_jogo, form=form)
@app.route('/atualizar', methods=['POST', ])
def atualizar():
form = FormularioJogo(request.form)
if form.validate_on_submit():
jogo = Jogos.query.filter_by(id=request.form['id']).first()
jogo.nome = form.nome.data
jogo.categoria = form.categoria.data
jogo.console = form.console.data
db.session.add(jogo)
db.session.commit()
arquivo = request.files['arquivo']
upload_path = app.config['UPLOAD_PATH']
timestamp = time.time()
deleta_arquivo(jogo.id)
arquivo.save(f'{upload_path}/capa{jogo.id}-{timestamp}.jpg')
return redirect(url_for('index'))
@app.route('/deletar/<int:id>')
def deletar(id):
if 'usuario_logado' not in session or session['usuario_logado'] == None:
return redirect(url_for('login'))
Jogos.query.filter_by(id=id).delete()
db.session.commit()
flash('Jogo deletado com sucesso')
return redirect(url_for('index'))
@app.route('/uploads/<nome_arquivo>')
def imagem(nome_arquivo):
return send_from_directory('uploads', nome_arquivo)
Arquivo views_user.py
from flask import render_template, request, redirect, session, flash, url_for, send_from_directory
from jogoteca import app
from models import Usuarios
from helpers import FormularioUsuario
from flask_bcrypt import check_password_hash
@app.route('/login')
def login():
proxima = request.args.get('proxima')
form = FormularioUsuario()
return render_template('login.html', proxima=proxima, form=form)
@app.route('/autenticar', methods=['POST', ])
def autenticar():
form = FormularioUsuario(request.form)
usuario = Usuarios.query.filter_by(nickname=form.nickname.data).first()
senha = check_password_hash(usuario.senha, form.senha.data)
if usuario and 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'))
Alterações no arquivo jogoteca.py
from flask_bcrypt import Bcrypt
# ...
bcrypt = Bcrypt(app)
from views_game import *
from views_user import *
# ...
E alterar a classe css das páginas editar.html
, novo.html
, login.html
e o arquivo prepara_banco.py
, para adaptar a criptografias de senhas, utilizando o Flask BCrypt