有很多的三方库支持在Python程序中写Excel文件,包括、xlwings、、xlswriter等,其中的xlwt虽然只支持写xls格式的Excel文件,但在性能方面的表现还是不错的。下面我们就以xlwt为例,来演示如何在Django项目中导出Excel报表。

    安装xlwt

    1. pip install xlwt

    导出包含所有老师信息的Excel表格的视图函数。

    1. urlpatterns = [
    2. path('excel/', views.export_teachers_excel),
    3. ]

    在Django项目中,如果需要导出PDF报表,可以借助三方库reportlab来生成PDF文件的内容,再将文件的二进制数据输出给浏览器并指定MIME类型为application/pdf,具体的代码如下所示。

    关于如何用reportlab定制PDF报表的内容,可以参考reportlab的。

    如果项目中需要生成前端统计图表,可以使用百度的ECharts。具体的做法是后端通过提供数据接口返回统计图表所需的数据,前端使用ECharts来渲染出柱状图、折线图、饼图、散点图等图表。例如我们要生成一个统计所有老师好评数和差评数的报表,可以按照下面的方式来做。

    1. def get_teachers_data(request):
    2. queryset = Teacher.objects.all()
    3. names = [teacher.name for teacher in queryset]
    4. good_counts = [teacher.good_count for teacher in queryset]
    5. bad_counts = [teacher.bad_count for teacher in queryset]
    6. return JsonResponse({'names': names, 'good': good_counts, 'bad': bad_counts})

    使用ECharts生成柱状图。

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <meta charset="UTF-8">
    4. <title>老师评价统计</title>
    5. <body>
    6. <div id="main" style="width: 600px; height: 400px"></div>
    7. <p>
    8. <a href="/">返回首页</a>
    9. </p>
    10. <script src="https://cdn.bootcss.com/echarts/4.2.1-rc1/echarts.min.js"></script>
    11. <script>
    12. var myChart = echarts.init(document.querySelector('#main'))
    13. fetch('/teachers_data/')
    14. .then(resp => resp.json())
    15. .then(json => {
    16. var option = {
    17. color: ['#f00', '#00f'],
    18. title: {
    19. text: '老师评价统计图'
    20. },
    21. tooltip: {},
    22. legend: {
    23. data:['好评', '差评']
    24. data: json.names
    25. },
    26. yAxis: {},
    27. series: [
    28. {
    29. name: '好评',
    30. type: 'bar',
    31. data: json.good
    32. },
    33. {
    34. name: '差评',
    35. type: 'bar',
    36. data: json.bad
    37. }
    38. ]
    39. }
    40. myChart.setOption(option)
    41. })
    42. </script>
    43. </body>

    运行效果如下图所示。