3
respostas

Não esta atualizando para nova capa

@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']
    uploads_path = app.config['UPLOAD_PATH']
    timestamp = time.time()
    deleta_arquivo(jogo.id)
    arquivo.save(f'{uploads_path}/capa{jogo.id}-{timestamp}.jpg')

    return redirect(url_for('index'))

Codigo do helpers.py

def deleta_arquivo(id):
    arquivo = recupera_imagem(id)
    if arquivo != 'capa_padrao.jpg':
        os.remove(os.path.join(app.config['UPLOAD_PATH'], arquivo))

Quando tento atualizar para uma nova capa aparece esse erro: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

3 respostas

Olá Dálerem! Tudo bem?

Analisando os trechos de código que você compartilhou, não consegui identificar alguma inconsistência que poderia levar ao erro que você destacou no print, o que me leva a pensar que o erro esteja acontecendo em outro código.

Então, peço que compartilhe comigo todo o seu projeto comigo, usando o GitHub ou Drive do Google. Pois, assim conseguirei testá-lo para identificar a raiz do problema.

Fico no aguardo e à disposição

Aqui vai o link: https://github.com/Dalerem/jogoteca_aula

Aguardo resposta!!!

Bom dia, Dálerem!

Depois de um tempo testando o seu código identifiquei alguns pontos de melhoria além da solução para o erro que você estava tendo, então segue as alterações que você deve fazer:

  1. O erro "You tried to access the file 'arquivo' in the request.files dictionary but it does not exist." está sendo causando porque você esqueceu de adicionar a propriedade enctype="multipart/form-data" para o seu fomulário no arquivo "editar.html". Então, na linha 3 do seu arquivo adicione a propriedade informada antes para ficar como mostrado abaixo:

        <form action="{{ url_for('atualizar') }}" method="post" enctype="multipart/form-data">
    
  2. Durante os meus testes percebi que ao adicionar uma nova imagem na página de editar ele não era alterada, e isso é causado por uma inconsistência no seu arquivo "app.js" da pasta "static". Nele, na primeira linha, você usou o termo from em vez de form. Segue o código corrigdo:

    $('form input[type="file"]').change(event => {
        let arquivos = event.target.files;
        if (arquivos.length === 0) {
          console.log('sem imagem pra mostrar')
        } else {
            if(arquivos[0].type == 'image/jpeg') {
              $('img').remove();
              let imagem = $('<img class="img-fluid">');
              imagem.attr('src', window.URL.createObjectURL(arquivos[0]));
              $('figure').prepend(imagem);
            } else {
              alert('Formato não suportado')
            }
        }
      });
    

Espero que isso resolva o seu problema!