Форум сайта python.su
Уважаемые, направьте меня в правильном направлении.
python+flask
Есть переменная data, где хранится результат запроса в БД.
Есть кнопка, которая запускает функция создания csv, который должен скачиваться сразу.
@app.route("/export_to_csv") def export_to_csv(): try: output = io.StringIO() writer = csv.writer(output) line = ['Дата и время', 'Номер абонента', 'Номер оператора', 'Полная длительность', 'Длительность разговора', 'Время ожидания', 'Внешний номер'] writer.writerow(line) writer.writerow(line) for row in data: dataline = [str(row[0]) + ',' + row[1] + ',' + row[2] + ',' + str(row[3]) + ',' + str(row[4]) + ',' + str(row[5]) + ',' + row[6]] writer.writerow(dataline) output.seek(0) output.truncate(0) response = Response(output, mimetype='text/csv') output.close() response.headers.set("Content-Disposition", "attachment", as_attachment=True, attachment_filename="log.csv") return response except Exception as e: print(e) finally: print('click')
Офлайн
Ряд неправильно формируешь перед записью
dataline = [str(row[0]), row[1], row[2], str(row[3]), str(row[4]), str(row[5]), row[6]]
Офлайн
Спасибо!
Но ничего не изменилось.
PyCharm вываливает в консоль:
127.0.0.1 - - “POST /report1 HTTP/1.1” 200 -
click
и все. Файла нет
Я правильно понимаю, что этот код должен генерировать файл и сохранять его на стороне клиента?
Отредактировано tomahawk (Апрель 17, 2020 11:49:55)
Офлайн
Пример генерации данных и передачи их как файла
import io import csv from flask import Flask app = Flask(__name__) @app.route('/') def hello(): return 'Hello World!' @app.route('/report') def report(): ofname = 'file.csv' data_stream = io.StringIO() writer = csv.writer(data_stream) writer.writerow(['Field1', 'Field2', 'Field3']) writer.writerow(['a1', 'b1', 'c1']) writer.writerow(['a2', 'b2', 'c2']) writer.writerow(['a3', 'b3', 'c3']) data_stream.seek(0) data = data_stream.read() datalen = len(data) headers = { 'Content-Disposition': 'attachment; filename={}'.format(ofname), 'Content-Length': str(datalen), 'Content-Type': 'text/csv; charset=utf-8' } response = (data, headers) return response
Отредактировано py.user.next (Апрель 17, 2020 12:45:58)
Офлайн
Спасибо, нашел такое решение - работает!
def export_to_csv(): si = io.StringIO() cw = csv.writer(si) cw.writerows('csvList') output = make_response(si.getvalue()) output.headers["Content-Disposition"] = "attachment; filename=export.csv" output.headers["Content-type"] = "text/csv" return output
Офлайн