1
resposta

Faça como eu fiz: aprimorando as capas de jogos

Criar um arquivo helpers.py

import os
from jogoteca import app

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_arquivo(id):
    arquivo = recupera_imagem(id)
    if arquivo != 'capa_padrao':
        os.remove(os.path.join(app.config['UPLOAD_PATH'], arquivo))

Alterações no arquivo views.py

from helpers import recupera_imagem, deleta_arquivo
import time
@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()
    capa_jogo = recupera_imagem(id)
    return render_template('editar.html', titulo='Editando Jogo', jogo=jogo,
                           capa_jogo=capa_jogo)
@app.route('/atualizar', methods=['POST', ])
def atualizar():
    jogo = Jogos.query.filter_by(id=request.form['id']).first()
    jogo.nome = request.form['nome']
    jogo.categoria = request.form['categoria']
    jogo.console = request.form['console']

    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('/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()

    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'))

Arquivo editar.html

<form action="{{ url_for('atualizar') }}" method="post" enctype="multipart/form-data">
    <figure class="img-thumbnail col-md-4">
        <img class="img-fluid" src="{{ url_for('imagem', nome_arquivo=capa_jogo) }}">
        <figcaption>
            <label class="fileContainer">
                Mudar Capa
                <input type="file" name="arquivo" accept=".jpg">
            </label>
        </figcaption>
    </figure>
1 resposta

Bom dia, Anderson! Tudo bem?

Dei uma olhada no seu código e ele está bem organizado e condizente com o que foi passado pelo instrutor, e isso mostra o seu comprometimento com o curso.

Além disso, agradeço por compartilhar os seus resultados desse módulo de aula aqui no fórum, sei que poderá ajudar outros alunos que se sentirem perdidos no desenvolvimento do projeto.

Caso surjam quaisquer dúvidas eu estarei à sua disposição.

Abraços e bons estudos!