Получить xlsx со страницы Quart с помощью JavaScriptPython

Программы на Python
Anonymous
Получить xlsx со страницы Quart с помощью JavaScript

Сообщение Anonymous »

У меня проблема. Я хочу получить xlsx по этому маршруту, проблема в том, что открывается другая страница, но это занимает много времени, затем я нажимаю кнопку с javascript, чтобы получить файл, но он не работает.
¿Что я делаю не так? или ¿Что я могу попробовать?
Я видел несколько решений с фрагментами, но не знаю, ¿кто-нибудь может мне помочь?

{% if total_records > 0 %}
Convertir a
xlsx
Descargar
{% endif %}


from quart import Blueprint
from quart import request
from quart import send_file, render_template, redirect, url_for

from quart_auth import login_required

from xlsxwriter import Workbook
from asyncio import TaskGroup
from wtforms import Form
from io import BytesIO

from math import ceil

from ..form import TransportCashForm
from ..contants import COLUMNS_TRANSPORT_CASH
from ..database import (
transport_cash_all,
transport_cash_limited_per_page,
transport_cash_total_records,
create_query_transport_cash,
)

transport_cash_blueprint = Blueprint(
"transport_cash_blueprint",
__name__,
url_prefix="/transport_cash",
)

@transport_cash_blueprint.get("/download_xlsx", methods=["GET"])
async def download_xlsx():
query_params = dict(request.args)

output = BytesIO()
workbook = Workbook(output, {"in_memory": True})

worksheet = workbook.add_worksheet()

query = create_query_transport_cash(query_params)
data = await transport_cash_all(query)

for col_num, title_data in enumerate(COLUMNS_TRANSPORT_CASH):
worksheet.write(0, col_num, title_data)

for row_num, row_data in enumerate(data):
for col_num, col_data in enumerate(row_data):
worksheet.write(row_num + 1, col_num, col_data)

workbook.close()
output.seek(0)
return await send_file(output, download_name="test.xlsx", as_attachment=True)

document.getElementById('button_download_xslx').addEventListener('click',
async (event) => {
event.preventDefault();
let descargarEnlace = document.getElementById("anchor-download-xlsx")
let newUrl = query_params()

const response = await fetch(newUrl, {method: "GET"});
const data = await response.blob();
const url = window.URL.createObjectURL(data);
descargarEnlace.href = url; // Asignar la URL al enlace
descargarEnlace.click();

}
)

query_params = () => {
const params = new URLSearchParams(window.location.search);

let url = new URL("http://127.0.0.1:5000/transport_cash/download_xlsx");

let params_dictionary = {
fecha_desde_cuando_value: params.get("fecha_desde_cuando_value"),
fecha_hasta_cuando_value: params.get("fecha_hasta_cuando"),
numero_identificacion_value: params.get("numero_identificacion"),
nombre_razon_social_value: params.get("nombre_razon_social"),
}

// Si el largo del objecto filtrado es mayor a 0 añade las llaves y valores
if (Object.keys(params_dictionary).length > 0) {
// filtramos los valores si es nulo

let filtered_params = Object.fromEntries(
Object.entries(params_dictionary).filter(
([key, value]) => value != null)
)

Object.keys(filtered_params).forEach(
key => url.searchParams.append(key, filtered_params[key])
);
return url
}
return url
}


Подробнее здесь: https://stackoverflow.com/questions/783 ... javascript

Вернуться в «Python»