Python - Problema con send_file de flask y javascript

 
Vista:
sin imagen de perfil
Val: 2
Ha disminuido su posición en 19 puestos en Python (en relación al último mes)
Gráfica de Python

Problema con send_file de flask y javascript

Publicado por Borja (2 intervenciones) el 13/11/2018 11:28:14
Hola a todos, estoy intentando crear un botón de exportar una consulta a una base de datos.

Funciona de la siguiente manera:

En primer lugar el usuario escribe en un formulario los parametros a buscar, despues, se ejecuta una función en python y finalmente se envia el archivo y se descarga. Por favor, ayuda llevo una semana para esto y no sale!! :(

En primer un botón a la función:
1
<a id="return_button" class="waves-effect waves-light btn btn-large left grey lighten-3 black-text" class="waves-effect waves-light btn btn-large left grey lighten-3 black-text" onclick="return_file()"><i class="material-icons">file_download</i></a>

En segundo lugar, una función en javascript para enviar los datos a python:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function return_file(offset) {
  console.log('return_file(offset = ' + offset + ')');
  $('#spinner').addClass('active');
 
  if (offset == 0) {
    window.get_classroom_parameters = {
 
      'filter_user': $('#filter_classroom').val(),
      'filter_age': $('#filter_age').val()
    };
  } else {
    window.get_classroom_parameters ['offset'] = window.get_classroom_parameters ['offset'] + window.get_classroom_parameters ['chunk'];
    window.get_classroom_parameters ['chunk'] = window.chunk;
  }
  $.post('return_file', get_classroom_parameters ).done(function() {
    console.log('done');
    $('#spinner').removeClass('active');
    window.ready = true;
  });
}

Finalmente, en python consulto a la base de datos, creo un archivo excel y lo envío:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
@app.route('/return_file',methods= ['POST'])
def return_file():
#.................................................. obtener parametros...........funciona sin problema
 
# Make de query
  data = pd.read_sql(query.statement, query.session.bind)
  ################# Version guardandolo en pc
  #filename=datetime.datetime.now().strftime("%Y-%m-%d-%H-%M-%S") + ".xlsx"
  #out_path = r"C:\Users\bjz\Documents\Universidad\Programa Clase\Version localhost\exports\{}".format(filename)
  #writer = pd.ExcelWriter(out_path , engine='xlsxwriter')
  #data.to_excel(writer, sheet_name='Sheet1')
  #writer.save()
  #print(filename)
  #return send_file(out_path, attachment_filename=filename, as_attachment = True)
 
  ########################### Con un archivo virtual
  output = BytesIO()
  writer = pd.ExcelWriter(output, engine='xlsxwriter')
  data.to_excel(writer, startrow = 0, merge_cells = False, sheet_name = "Sheet_1")
  workbook = writer.book
  worksheet = writer.sheets["Sheet_1"]
  format = workbook.add_format()
  format.set_bg_color('#eeeeee')
  worksheet.set_column(0,9,28)
  writer.save()
  writer.close()
  writer.save()
  output.seek(0)
  return send_file(output, attachment_filename="testing.xlsx", as_attachment=True)


Ninguna de las dos formas funciona, nunca se descarga nada en el navegador. El problema tiene que estar en el send_file y en el javascript ya que en la version de guardarlo en el ordenador el archivo se crea satisfactoriamente y con los datos necesarios así que el problema no está en la query. Por favor AYUDA. Estaría hiperagradecido.

Un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder