Django HTTPResponse響應(yīng)體中返回openpyxl生成的文件過程
Django返回文件流時使用指定文件名
http響應(yīng)頭中字符應(yīng)該按照url百分號編碼
# Python3
from urllib.parse import quote
...
# 字符串編碼問題 str(filename) ---- filename為文件名, 可能需要轉(zhuǎn)換為字符串先
response['Content-Disposition'] = 'attachment; filename={0}.xlsx'.format(quote(filename))
Django HTTPResponse響應(yīng)體中返回openpyxl生成的文件
直接將 openpyxl 生成 Excel 文檔寫入到 Django 的HttpResponse 對象響應(yīng)體中
在 openpyxl 的源碼中的有一個save_virtual_workbook 方法, 這個方法跟save在同一個文件,
導(dǎo)入路徑為
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
# 導(dǎo)出數(shù)據(jù)
def export_data(request):
wb = openpyxl.Workbook()
'''
....為寫入數(shù)據(jù)的步驟 略
'''
# 吧文件流寫入 返回體
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
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python編程快速上手——強(qiáng)口令檢測算法案例分析
這篇文章主要介紹了Python強(qiáng)口令檢測算法,結(jié)合實(shí)例形式分析了Python針對密碼口令強(qiáng)度檢測的相關(guān)算法實(shí)現(xiàn)技巧,需要的朋友可以參考下2020-02-02
Pyspider進(jìn)行API接口抓取和數(shù)據(jù)采集的實(shí)現(xiàn)
Pyspider是一個基于Python的強(qiáng)大的網(wǎng)絡(luò)爬蟲框架,它提供了豐富的功能和靈活的擴(kuò)展性,使我們可以輕松地進(jìn)行數(shù)據(jù)的抓取和處理,本文主要介紹了Pyspider進(jìn)行API接口抓取和數(shù)據(jù)采集的實(shí)現(xiàn),感興趣的可以了解一下2023-09-09
如何在Conda環(huán)境中降級Python版本詳細(xì)指南
在Conda環(huán)境中查看Python版本是一個常見需求,特別是當(dāng)您管理多個環(huán)境時,這篇文章主要介紹了如何在Conda環(huán)境中降級Python版本的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-11-11
pyqt4教程之實(shí)現(xiàn)半透明的天氣預(yù)報界面示例
這篇文章主要介紹了pyqt4實(shí)現(xiàn)半透明的天氣預(yù)報界面示例,需要的朋友可以參考下2014-03-03
vscode配置與python虛擬環(huán)境切換的幾種方式總結(jié)
Python之所以強(qiáng)大,除了語言本身的特性外,更重要的是擁有無所不及的第三方庫,下面這篇文章主要給大家介紹了關(guān)于vscode配置與python虛擬環(huán)境切換的幾種方式,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12
numpy.random.shuffle打亂順序函數(shù)的實(shí)現(xiàn)
這篇文章主要介紹了numpy.random.shuffle打亂順序函數(shù)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
pandas中quantile()函數(shù)的應(yīng)用及說明
本文介紹了pandas中quantile()函數(shù)用于計算DataFrame或Series中數(shù)值型數(shù)據(jù)的分位數(shù),通過示例展示了如何計算整個DataFrame、每列和每行的分位數(shù),并可指定百分位數(shù)和axis參數(shù)進(jìn)行計算2026-05-05

