Problema: Eu seleciono a opção "editar", escolho uma imagem, clico em salvar, clico em editar novamente e a imagem não está lá, ou seja, não atualiza. Mostrarei as 3 imagens, onde na primeira imagem eu abro o editar, na segunda imagem eu seleciono uma imagem e salvo, e na terceira imagem eu volto pra editar e a imagem que escolhi não está mais lá
Meu código do 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_imagem
import time
from helpers import FormularioJogo
@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
existe = Jogos.query.filter_by(nome=nome).first()
if existe:
flash('Jogo já existente!')
return redirect(url_for('index'))
jogo = Jogos(nome=nome, categoria=categoria, console=console)
db.session.add(jogo)
db.session.commit()
arquivo = request.files['arquivo']
upload_path = app.config['UPLOAD_PATH']
tempo = time.time()
arquivo.save(f'{upload_path}/capa{jogo.id}-{tempo}.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', id=id)))
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']
tempo = time.time()
deleta_imagem(id)
arquivo.save(f'{upload_path}/capa{jogo.id}-{tempo}.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!')
return redirect(url_for('index'))
@app.route('/uploads/<nome_arquivo>')
def imagem(nome_arquivo):
return send_from_directory('uploads', nome_arquivo)
app.run(debug=True)
As funções de recuperar e deletar imagem no views.py:
def recupera_imagem(id):
for nome_arquivo in os.listdir(app.config['UPLOAD_PATH']):
if f'capa{id}' in nome_arquivo:
return nome_arquivo
return 'capa_padrao.jpg'
def deleta_imagem(id):
imagem = recupera_imagem(id)
if imagem != 'capa_padrao.jpg':
os.remove(os.path.join(app.config['UPLOAD_PATH']), imagem)