Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

1.1K
Visualizações
Envíe un formulario en una aplicación de una sola página usando Flask sin recargar

Estoy trabajando en una aplicación Flask de una sola página en python. Para cambiar el contenido de la página, simplemente invoco una función de javascript que oculta un div y revela otro.

Uno de estos divs contiene un formulario en el que un usuario puede cargar un archivo, que ejecuto a través de un script de Python que analiza los datos del archivo.

El problema es que después de ejecutar el código, Flask parece querer que lo redirija a una nueva página. Preferiría devolver un disparador para simplemente ejecutar mi función javascript.

El formulario HTML:

 <form class='upload-form' id='upload-form' action="/upload" method='POST' enctype="multipart/form-data" onsubmit="return show_and_hide('load', 'upload')"> <input type="file" name='file' value="Browse..."> <input type="submit" value='Upload'> </form>

La función Javascript:

 var callFunction; function show_and_hide(div_in, div_out){ var shower = document.getElementById(div_in); var hider = document.getElementById(div_out); var hider_items = hider.children; var i; for(i = 0; i < hider_items.length; i++){ hider_items[i].style.animation = "hide 1s"; } callFunction = setTimeout(change_div, 1000, div_in, div_out); var shower_items = shower.children; var n; for(n = 0; n < shower_items.length; n++){ shower_items[n].style.animation = "show 1s"; } return true; }

Y la aplicación del matraz (en realidad no la tengo regresando ???):

 @app.route('/upload', methods=['POST', 'GET']) def upload_file(): f = request.files['file'] new_file_name = str(uuid.uuid1()) + '.zip' f.save(os.path.join('uploads/', new_file_name)) path = 'uploads/' + new_file_name return ???

Agradezco cualquier consejo! ¡Gracias!

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Deberá usar JavaScript para enviar los archivos a Flask, ya que enviar un formulario HTML siempre lo redirigirá. Aquí hay un ejemplo usando AJAX ¿Cómo puedo cargar archivos de forma asíncrona?

Flask necesita todas las funciones de vista (rutas) para devolver una respuesta para enviar al cliente. Puede devolver una cadena vacía y un estado 200 para que Flask sepa que procesó la solicitud con éxito.

 @app.route('/upload', methods=['POST', 'GET']) def upload_file(): f = request.files['file'] new_file_name = str(uuid.uuid1()) + '.zip' f.save(os.path.join('uploads/', new_file_name)) path = 'uploads/' + new_file_name return '', 200
over 4 years ago · Santiago Trujillo Relatório

0

La solución que terminé usando era un poco antigua pero funciona muy bien. Redirijo el formulario a un iframe invisible agregando un botón al formulario:

 <input type="button" id="double-analysis-button" value='Correlate' style='width:250px' onclick="redirect('double-analysis-form', 'double-analysis-iframe', 'graph-loading', 'graph-display')"> <iframe class="uploader" id="double-analysis-iframe" name="double-analysis-iframe" src="" frameborder="0"></iframe>

y la función javascript:

 function redirect(elemid, tgt, sh1, sh2){ document.getElementById(elemid).target = tgt; document.getElementById(elemid).submit(); var callFunction; callFunction = show_and_hide(sh1, sh2); }

La función show_and_hide es lo que uso para desvanecer un div hacia afuera y otro div hacia adentro.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda