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:
En segundo lugar, una función en javascript para enviar los datos a python:
Finalmente, en python consulto a la base de datos, creo un archivo excel y lo envío:
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
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


0