开发者

Django HTTPResponse响应体中返回openpyxl生成的文件过程

目录
  • Django返回文件流时使用指定文件名
  • Django HTTPResponse响应体中返回openpyxl生成的文件
    • 导入路径为
    • 在Django中使用并返回
  • 总结

    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(reque编程客栈st):
    
        wb = openpyxl.Workbook()
    	'''
    	....为写入数据的步骤 略
    	'''
    
    	# 吧文件流写入 返回体
        response = HttpResponse(content=save_virtual_workbook(wb),
                                content_type='application/vnd.openXMLformats-officedocument.spreadsheetml.sheet'python)
        # 给返回的文件命名
        response['Contwww.devze.coment-Disposition'] = 'attachment; filename={0}.xlsx'.format(quote(str(title)))  # 中文名字
    
        return response
    
    
    

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜