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

Written by

in

文章目录
  • http响应头中字符应该按照url百分号编码 # Python3 from urllib.parse import quote … # 字符串编码问题 str(filename) —- filename为文件名, 可能需要转换为字符串先 response[‘Content-Disposition’] = ‘attachment; filename={0}.xlsx’.format(quote(filename))
  • 直接将 openpyxl 生成 Excel 文档写入到 Django 的HttpResponse 对象响应体中 在 openpyxl 的源码中的有一个save_virtual_workbook 方法, 这个方法跟save在同一个文件,
  • 以上为个人经验,希望能给大家一个参考,也希望大家多多支持风君子博客。 您可能感兴趣的文章: Django框架HttpResponse和HttpRequest对象学习 详解Django关于StreamingHttpResponse与FileResponse文件下载的最优方法 django实现HttpResponse返回json数据为中文 Django框架HttpResponse对象用法实例分析 Django使用HttpResponse返回图片并显示的方法 Django的HttpRequest和HttpResponse对象详解 Django使用httpresponse返回用户头像实例代码
  • 目录
    • Django返回文件流时使用指定文件名
    • Django HTTPResponse响应体中返回openpyxl生成的文件
      • 导入路径为
      • 在Django中使用并返回
    • 总结

      http响应头中字符应该按照url百分号编码

      # Python3
      from urllib.parse import quote
      ...
      
      # 字符串编码问题 str(filename) ---- filename为文件名, 可能需要转换为字符串先
      response['Content-Disposition'] = 'attachment; filename={0}.xlsx'.format(quote(filename))
      

      直接将 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
      

      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
      
      
      

      以上为个人经验,希望能给大家一个参考,也希望大家多多支持风君子博客。

      您可能感兴趣的文章:

      • Django框架HttpResponse和HttpRequest对象学习
      • 详解Django关于StreamingHttpResponse与FileResponse文件下载的最优方法
      • django实现HttpResponse返回json数据为中文
      • Django框架HttpResponse对象用法实例分析
      • Django使用HttpResponse返回图片并显示的方法
      • Django的HttpRequest和HttpResponse对象详解
      • Django使用httpresponse返回用户头像实例代码

      站内搜索