У меня странная проблема, возникающая в django, и я не уверен, как вообще начать ее устранять. Я использую xlsxwriter
для создания отчета Excel из некоторых данных. Затем я хочу передать сгенерированный файл пользователю. Мой код вида выглядит так:
today = datetime.datetime.now()
document = gen_excel(today)
filename = 'export_{}.xlsx'.format(today.strftime('%Y-%m-%d'))
response = HttpResponse(
document.read(),
content_type='application/ms-excel'
)
response['Content-Disposition'] = 'attachment; filename=%s' % filename
return response
, а функция gen_excel
выглядит следующим образом:
def gen_excel(start_date):
output = io.BytesIO()
workbook = xlsxwriter.Workbook(output, {'in_memory': True})
create_sheets(start_date, workbook) # Creates and fills worksheets with data
workbook.close()
output.seek(0)
return output
Итак, с gen_excel
я возвращаю поток bytesIO, который был заполнен xlsxwriter
. Моя проблема в том, что (при использовании встроенного сервера dev) при первом вызове представления я получаю отлично читаемый файл xlsx. Все последующие вызовы возвращают поврежденный файл xlsx, который может быть отремонтирован Excel (хотя это убивает все форматирование и т. Д. c ..). Если я смотрю размеры файлов, первый вывод составляет 40655 байт, тогда как последующие загрузки немного меньше и составляют 40336 байт.
Кикер, после перезапуска сервера первый вывод снова становится идеальным. Поэтому моя функция gen_excel
не изменяет данные на сервере - похоже, это связано с последующими загрузками после запуска сервера. Также нет ошибок, выводимых django, xlsxwriter, сервером и т. Д. c. Я просто получаю испорченный файл для всех последующих загрузок, пока сервер не будет перезагружен.
Есть идеи, как мне начать устранение неполадок с этим?