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的就业方向

    目前最全的python的就业方向

    Python是一门面向对象的编程语言,编译速度超快,从诞生到现在已经25个年头了。其特点在于灵活运用,因为其拥有大量第三方库,所以开发人员不必重复造轮子,就像搭积木一样,只要擅于利用这些库就可以完成绝大部分工作
    2018-06-06
  • Python编程快速上手——强口令检测算法案例分析

    Python编程快速上手——强口令检测算法案例分析

    这篇文章主要介绍了Python强口令检测算法,结合实例形式分析了Python针对密码口令强度检测的相关算法实现技巧,需要的朋友可以参考下
    2020-02-02
  • Pyspider进行API接口抓取和数据采集的实现

    Pyspider进行API接口抓取和数据采集的实现

    Pyspider是一个基于Python的强大的网络爬虫框架,它提供了丰富的功能和灵活的扩展性,使我们可以轻松地进行数据的抓取和处理,本文主要介绍了Pyspider进行API接口抓取和数据采集的实现,感兴趣的可以了解一下
    2023-09-09
  • 如何在Conda环境中降级Python版本详细指南

    如何在Conda环境中降级Python版本详细指南

    在Conda环境中查看Python版本是一个常见需求,特别是当您管理多个环境时,这篇文章主要介绍了如何在Conda环境中降级Python版本的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-11-11
  • pyqt4教程之实现半透明的天气预报界面示例

    pyqt4教程之实现半透明的天气预报界面示例

    这篇文章主要介绍了pyqt4实现半透明的天气预报界面示例,需要的朋友可以参考下
    2014-03-03
  • vscode配置与python虚拟环境切换的几种方式总结

    vscode配置与python虚拟环境切换的几种方式总结

    Python之所以强大,除了语言本身的特性外,更重要的是拥有无所不及的第三方库,下面这篇文章主要给大家介绍了关于vscode配置与python虚拟环境切换的几种方式,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • 精心整理总结的Python自动化测试面试题

    精心整理总结的Python自动化测试面试题

    简单来说,自动化测试框架包含了所有的测试工作所需的测试框架,下面这篇文章主要给大家介绍了关于Python自动化测试面试题的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • numpy.random.shuffle打乱顺序函数的实现

    numpy.random.shuffle打乱顺序函数的实现

    这篇文章主要介绍了numpy.random.shuffle打乱顺序函数的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Python对象的属性访问过程详解

    Python对象的属性访问过程详解

    这篇文章主要介绍了Python对象的属性访问过程详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • pandas中quantile()函数的应用及说明

    pandas中quantile()函数的应用及说明

    本文介绍了pandas中quantile()函数用于计算DataFrame或Series中数值型数据的分位数,通过示例展示了如何计算整个DataFrame、每列和每行的分位数,并可指定百分位数和axis参数进行计算
    2026-05-05

最新评论