Django学习之django配置vue完成数据库数据的excel形式的文件下载

vue

将数据库中的数据写入excel文件并下载的流程梳理

后端实现

后台url.py

urlpatterns = [

....

re_path('^host/host_excel/', views.HostExcelView.as_view()),

]

后台视图views.py

class HostExcelView(APIView):

# 下载host数据excel文件

def get(self,request):

#1 读取数据库数据

all_host_data = models.Host.objects.all().values('id', 'category', 'hostname', 'ip_addr', 'port', 'username','desc', 'evrironments')

print(all_host_data)

# 2 写入excel并保存

# 关于excel的操作,参考我的博客

# 创建excel

ws = xlwt.Workbook(encoding='utf-8')

# 创建工作簿

st = ws.add_sheet('主机数据')

# 写标题行

st.write(0, 0, 'id')

st.write(0, 1, 'category')

st.write(0, 2, 'hostname')

st.write(0, 3, 'ip_addr')

st.write(0, 4, 'port')

st.write(0, 5, 'username')

st.write(0, 6, 'desc')

st.write(0, 7, 'evrironments')

# 写入数据,从第一行开始

excel_row = 1

for host_obj in all_host_data:

st.write(excel_row, 0, host_obj.get('id'))

st.write(excel_row, 1, host_obj.get('category'))

st.write(excel_row, 2, host_obj.get('hostname'))

st.write(excel_row, 3, host_obj.get('ip_addr'))

st.write(excel_row, 4, host_obj.get('port'))

st.write(excel_row, 5, host_obj.get('username'))

st.write(excel_row, 6, host_obj.get('desc'))

st.write(excel_row, 7, host_obj.get('evrironments'))

excel_row += 1

# sio = BytesIO()

# 将数据写入io数据流,不用在本地生成excel文件,不然效率就低了

sio = BytesIO()

ws.save(sio)

sio.seek(0)

# print(sio.getvalue())

#3 将excel数据响应回客户端

response = HttpResponse(sio.getvalue(), content_type='application/vnd.ms-excel')

# response['Content-Disposition'] = 'attachment; filename=xx.xls'

# 文件名称中文设置

from django.utils.encoding import escape_uri_path

response['Content-Disposition'] = 'attachment; filename={}'.format(escape_uri_path('主机列表数据.xls'))

response.write(sio.getvalue()) #必须要给response写入一下数据,不然不生效

return response

前端vue实现

其实不管是不是vue,都可以,因为就是一个a标签就能搞定

<a style="color:#fff;" href="http://api.hippo.com:8000/host/host_excel/"> 导出主机列表数据</a>

注意:href属性的值,是你要访问的后台路径

 

 

以上是 Django学习之django配置vue完成数据库数据的excel形式的文件下载 的全部内容, 来源链接: utcz.com/z/377457.html

回到顶部