有很多的三方库支持在Python程序中写Excel文件,包括、xlwings
、、xlswriter
等,其中的xlwt虽然只支持写xls格式的Excel文件,但在性能方面的表现还是不错的。下面我们就以xlwt
为例,来演示如何在Django项目中导出Excel报表。
安装xlwt
。
pip install xlwt
导出包含所有老师信息的Excel表格的视图函数。
urlpatterns = [
path('excel/', views.export_teachers_excel),
]
在Django项目中,如果需要导出PDF报表,可以借助三方库reportlab
来生成PDF文件的内容,再将文件的二进制数据输出给浏览器并指定MIME类型为application/pdf
,具体的代码如下所示。
关于如何用reportlab
定制PDF报表的内容,可以参考reportlab的。
如果项目中需要生成前端统计图表,可以使用百度的ECharts。具体的做法是后端通过提供数据接口返回统计图表所需的数据,前端使用ECharts来渲染出柱状图、折线图、饼图、散点图等图表。例如我们要生成一个统计所有老师好评数和差评数的报表,可以按照下面的方式来做。
def get_teachers_data(request):
queryset = Teacher.objects.all()
names = [teacher.name for teacher in queryset]
good_counts = [teacher.good_count for teacher in queryset]
bad_counts = [teacher.bad_count for teacher in queryset]
return JsonResponse({'names': names, 'good': good_counts, 'bad': bad_counts})
使用ECharts生成柱状图。
<!DOCTYPE html>
<html lang="en">
<meta charset="UTF-8">
<title>老师评价统计</title>
<body>
<div id="main" style="width: 600px; height: 400px"></div>
<p>
<a href="/">返回首页</a>
</p>
<script src="https://cdn.bootcss.com/echarts/4.2.1-rc1/echarts.min.js"></script>
<script>
var myChart = echarts.init(document.querySelector('#main'))
fetch('/teachers_data/')
.then(resp => resp.json())
.then(json => {
var option = {
color: ['#f00', '#00f'],
title: {
text: '老师评价统计图'
},
tooltip: {},
legend: {
data:['好评', '差评']
data: json.names
},
yAxis: {},
series: [
{
name: '好评',
type: 'bar',
data: json.good
},
{
name: '差评',
type: 'bar',
data: json.bad
}
]
}
myChart.setOption(option)
})
</script>
</body>
运行效果如下图所示。