IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Vue+Django+axios+openpyxl后端python读取数据库生成excel文件前端下载(前后端代码) -> 正文阅读

[Python知识库]Vue+Django+axios+openpyxl后端python读取数据库生成excel文件前端下载(前后端代码)

前言

本文使用axios和openpyxl,想要了解这两个的同学链接如下:
openpyxl:https://blog.csdn.net/i_coffer/article/details/112134491
通过python来读取数据库生成excel文件
axios:https://blog.csdn.net/gao_xu_520/article/details/79726298
前端发送请求的一种方式

前端代码

responseType: 'blob’这步十分关键

<template>
<!--  通过按钮的方式来下载文件做测试-->
  <el-button plain  @click="getEventDay()">朴素按钮</el-button>
</template>

<script>
import axios from 'axios'
export default {
  data () {
    return {
    }
  },
  methods: {
    // 调用的方法
    async getEventDay () {
      axios({
        // axios访问的方式,url地址,以及response的流格式,设置为blob这一步十分重要
        method: 'post',
        url: 'http://127.0.0.1:8000/api/event_day/',
        responseType: 'blob'
      }).then(res => {
        // 获取头文件中的内容为了读取后端发送文件的文件名
        var disposition = res.headers['content-disposition']
        var fileName = decodeURI(disposition.substring(disposition.indexOf('filename=') + 9, disposition.length))
        // 创建blob流并将数据添加进去,根据不同类型文件设置不同的type,excel就设置这种type就可以了
        const blob = new Blob([res.data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }) // 假设文件为pdf
        // 创建组件并点击,地址为流地址,之后销毁掉
        const link = document.createElement('a')
        link.href = window.URL.createObjectURL(blob)
        link.download = fileName
        link.click()
        link.remove()
      }).catch(err => {
        var enc = new TextDecoder('utf-8')
        var res = JSON.parse(enc.decode(new Uint8Array(err.data))) // 转化成json对象
        console.log(res)
      })
    }
  }
}
</script>

<style scoped>

</style>

后端代码

from openpyxl import Workbook
def event_day(request):
# django里面的特定调用数据库的方法
        report = models.ReportForm.objects.all()
        #创建对象
        wb = Workbook()
        #起文件名字
        dest_filename = '日报'
        #创建sheet
        ws1 = wb.active
        ws1.title = "dayilyCount"
        #给excel的单元格填写内容
        ws1.cell(1, 1, 'id')
        ws1.cell(1, 2, '1234')
        ws1.cell(1, 3, '事件类型')
        ws1.cell(1, 4, '备注')
        row = 2
        col = 1
        for rep in report:
            ws1.cell(row, col, rep.id)
            ws1.cell(row, col + 1, rep.time)
            ws1.cell(row, col + 2, rep.type)
            ws1.cell(row, col + 3, rep.payload)
            row = row + 1
#返回内容
        response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', charset='utf-8')
        response['Content-Disposition'] = 'attachment; filename={0}.xlsx'.format(quote(str(dest_filename)))
        response['Access-Control-Expose-Headers'] = 'Content-Disposition'
        wb.save(response)
        return response
 

问题一

请添加图片描述
解决方案是因为之前测试的时候使用了mockjs,将mock模块删除就好了

问题二

无法传输文件名
解决方案:后端添加 response[‘Access-Control-Expose-Headers’] = 'Content-Disposition’
前端设置 responseType: 'blob’

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-12-04 13:24:12  更:2021-12-04 13:25:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 2:23:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码