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

 更新时间:2025年08月02日 16:31:56   作者:蓝小白1024  
Django返回文件流时需通过Content-Disposition头指定编码后的文件名,使用openpyxl的save_virtual_workbook方法将Excel数据直接写入HttpResponse响应体,实现浏览器正确下载文件

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 = ZipFile(tmp, 'w', ZIP_DEFLATED, allowZip64=True)

    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(request):

    wb = openpyxl.Workbook()
	'''
	....为写入数据的步骤 略
	'''

	# 吧文件流写入 返回体
    response = HttpResponse(content=save_virtual_workbook(wb),
                            content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
    # 给返回的文件命名
    response['Content-Disposition'] = 'attachment; filename={0}.xlsx'.format(quote(str(title)))  # 中文名字

    return response


总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 如何基于python把文字图片写入word文档

    如何基于python把文字图片写入word文档

    这篇文章主要介绍了如何基于python把文字写入word文档,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • python小白练习题之条件控制与循环控制

    python小白练习题之条件控制与循环控制

    Python 中的条件控制和循环语句都非常简单,也非常容易理解,与其他编程语言类似,下面这篇文章主要给大家介绍了关于python小白练习题之条件控制与循环控制的相关资料,需要的朋友可以参考下
    2021-10-10
  • 使用Python在Word中查找并高亮指定文本

    使用Python在Word中查找并高亮指定文本

    当你需要在长文档或报告中快速找到特定的关键词或短语,Word中提供的查找并高亮这一功能可以帮助你迅速定位这些内容,本文将介绍如何使用Python在Word中查找并突出显示指定的文本,需要的朋友可以参考下
    2024-03-03
  • python中dir函数用法分析

    python中dir函数用法分析

    这篇文章主要介绍了python中dir函数用法,实例分析了dir函数的功能及相应的使用技巧,需要的朋友可以参考下
    2015-04-04
  • Python文件操作的方法

    Python文件操作的方法

    本文详细讲解了Python文件操作的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-12-12
  • Python综合应用名片管理系统案例详解

    Python综合应用名片管理系统案例详解

    这篇文章主要介绍了Python综合应用名片管理系统,结合具体案例形式详细分析了Python名片管理系统相关步骤、原理、实现方法与操作注意事项,需要的朋友可以参考下
    2020-01-01
  • Django model update的多种用法介绍

    Django model update的多种用法介绍

    Django开发过程中对表(model)的增删改查是最常用的功能之一,本文介绍笔者在使用model update过程中遇到的那些事
    2019-07-07
  • Python中NumPy数组的维度变换解析

    Python中NumPy数组的维度变换解析

    这篇文章主要介绍了Python中NumPy数组的维度变换解析,就像我们可以通过向 NumPy 提供列表列表来创建 2D 数组一样,我们可以通过创建列表的列表的列表来创建 3D 数组,需要的朋友可以参考下
    2023-09-09
  • Django解决无法从request.POST中获取URL传进来的参数

    Django解决无法从request.POST中获取URL传进来的参数

    这篇文章主要介绍了Django解决无法从request.POST中获取URL传进来的参数问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • python2.7安装opencv-python很慢且总是失败问题

    python2.7安装opencv-python很慢且总是失败问题

    这篇文章主要介绍了python2.7安装opencv-python很慢且总是失败问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02

最新评论