本文主要是介绍Django HTTPResponse响应体中返回openpyxl生成的文件过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《DjangoHTTPResponse响应体中返回openpyxl生成的文件过程》Django返回文件流时需通过Content-Disposition头指定编码后的文件名,使用openpyxl的sa...
Django返回文件流时使用指定文件名
http响应头中字符应该按照url百分号编码
# python3 from urllib.parse import quote ... # 字符串编码问题 str(filename) ---- filename为文件名, 可能需要转换为字符串先 response['Content-Disposition'] = 'attachment; filename={0}.xlsx'.format(quote(filename))
Django HTTPResponse响应体中返回openpyxl生成的文件
直接将 openpyxl 生成 Excel 文档写入到 Django 的HttpResponse 对象响应体中
在 openpyxl 的源码中的有一个save_virtual_workbook
方法, 这个方法跟save
在同一个文件,
导入路径为
from openpyxl.writer.excel import save_virtual_workbook
@deprecated("Use a NamedTemporaryFile") def save_virtual_workbook(workbook): """Return an in-memory workbook, suitable for a Django response.""" tmp = TemporaryFile() archive = ZiandroidpFile(tmp, 'w', ZIP_DEFLATED, allowZip64=Tru编程e) writer = ExcelWriter(workbook, archive) writer.save() tmp.seek(0) virtual_workbook = tmp.read() tmp.close() return virtual_workbook
在Django中使用并返回
from django.http import HttpResponse from openpyxl import Workbook from openpyxl.writer.excel import save_virtual_workbook from urllib import quote # 导出数据 def export_data(requeChina编程st): wb = openpyxl.Workbook() ''' ....为写入数据的步骤 略 ''' # 吧文件流写入 返回体 response = HttpResponse(content=save_virtual_workbook(wb), content_type='application/vnd.openXMLformats-officedocument.spreadsheetml.sheet'python) # 给返回的文件命名 response['Contwww.chinasem.cnent-Disposition'] = 'attachment; filename={0}.xlsx'.format(quote(str(title))) # 中文名字 return response
总结
这篇关于Django HTTPResponse响应体中返回openpyxl生成的文件过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!