File tree Expand file tree Collapse file tree 5 files changed +37
-21
lines changed
Expand file tree Collapse file tree 5 files changed +37
-21
lines changed Original file line number Diff line number Diff line change 1- ## 报表
1+ ## 制作报表
22
33### 导出Excel报表
44
@@ -52,6 +52,26 @@ urlpatterns = [
5252]
5353```
5454
55+ ### 导出PDF报表
56+
57+ 在Django项目中,如果需要导出PDF报表,可以借助三方库reportlab来生成PDF文件的内容,再将文件的二进制数据输出给浏览器并指定MIME类型为` application/pdf ` ,具体的代码如下所示。
58+
59+ ``` Python
60+ def export_pdf (request : HttpRequest) -> HttpResponse:
61+ buffer = io.BytesIO()
62+ pdf = canvas.Canvas(buffer)
63+ pdf.setFont(" Helvetica" , 80 )
64+ pdf.setFillColorRGB(0.2 , 0.5 , 0.3 )
65+ pdf.drawString(100 , 550 , ' hello, world!' )
66+ pdf.showPage()
67+ pdf.save()
68+ resp = HttpResponse(buffer.getvalue(), content_type = ' application/pdf' )
69+ resp[' content-disposition' ] = ' inline; filename="demo.pdf"'
70+ return resp
71+ ```
72+
73+ 关于如何用reportlab定制PDF报表的内容,可以参考reportlab的[ 官方文档] ( https://www.reportlab.com/docs/reportlab-userguide.pdf ) 。
74+
5575### 生成前端统计图表
5676
5777如果项目中需要生成前端统计图表,可以使用百度的[ ECharts] ( < https://echarts.baidu.com/ > ) 。具体的做法是后端通过提供数据接口返回统计图表所需的数据,前端使用ECharts来渲染出柱状图、折线图、饼图、散点图等图表。例如我们要生成一个统计所有老师好评数和差评数的报表,可以按照下面的方式来做。
@@ -62,7 +82,6 @@ def get_teachers_data(request):
6282 names = [teacher.name for teacher in queryset]
6383 good_counts = [teacher.good_count for teacher in queryset]
6484 bad_counts = [teacher.bad_count for teacher in queryset]
65- # 返回JSON格式的数据
6685 return JsonResponse({' names' : names, ' good' : good_counts, ' bad' : bad_counts})
6786```
6887
File renamed without changes.
Original file line number Diff line number Diff line change @@ -22,20 +22,20 @@ MIDDLEWARE = [
2222
2323我们稍微为大家解释一下这些中间件的作用:
2424
25- 1 . CommonMiddleware - 基础设置中间件,可以处理以下一些配置参数。
25+ 1 . ` CommonMiddleware ` - 基础设置中间件,可以处理以下一些配置参数。
2626 - DISALLOWED_USER_AGENTS - 不被允许的用户代理(浏览器)
2727 - APPEND_SLASH - 是否追加` / `
2828 - USE_ETAG - 浏览器缓存相关
29- 2 . SecurityMiddleware - 安全相关中间件,可以处理和安全相关的配置项。
29+ 2 . ` SecurityMiddleware ` - 安全相关中间件,可以处理和安全相关的配置项。
3030 - SECURE_HSTS_SECONDS - 强制使用HTTPS的时间
3131 - SECURE_HSTS_INCLUDE_SUBDOMAINS - HTTPS是否覆盖子域名
3232 - SECURE_CONTENT_TYPE_NOSNIFF - 是否允许浏览器推断内容类型
3333 - SECURE_BROWSER_XSS_FILTER - 是否启用跨站脚本攻击过滤器
3434 - SECURE_SSL_REDIRECT - 是否重定向到HTTPS连接
3535 - SECURE_REDIRECT_EXEMPT - 免除重定向到HTTPS
36- 3 . SessionMiddleware - 会话中间件。
37- 4 . CsrfViewMiddleware - 通过生成令牌,防范跨请求份伪的造中间件。
38- 5 . XFrameOptionsMiddleware - 通过设置请求头参数,防范点击劫持攻击的中间件。
36+ 3 . ` SessionMiddleware ` - 会话中间件。
37+ 4 . ` CsrfViewMiddleware ` - 通过生成令牌,防范跨请求份伪的造中间件。
38+ 5 . ` XFrameOptionsMiddleware ` - 通过设置请求头参数,防范点击劫持攻击的中间件。
3939
4040在请求的过程中,上面的中间件会按照书写的顺序从上到下执行,然后是URL解析,最后请求才会来到视图函数;在响应的过程中,上面的中间件会按照书写的顺序从下到上执行,与请求时中间件执行的顺序正好相反。
4141
Original file line number Diff line number Diff line change @@ -662,7 +662,7 @@ def simple_middleware(get_response):
662662` ` `
663663
664664` ` ` Python
665- class MyMiddleware(object) :
665+ class MyMiddleware:
666666
667667 def __init__(self, get_response):
668668 self.get_response = get_response
@@ -675,7 +675,7 @@ class MyMiddleware(object):
675675` ` `
676676
677677` ` ` Python
678- class MyMiddleware:
678+ class MyMiddleware(MiddlewareMixin) :
679679
680680 def __init__(self):
681681 pass
Original file line number Diff line number Diff line change 249249- Django框架对session的支持
250250- 视图函数中的cookie读写操作
251251
252- #### Day46 - [ 报表和日志] ( ./Day41-55/46.报表和日志 .md )
252+ #### Day45 - [ 报表和日志] ( ./Day41-55/45.制作报表 .md )
253253
254254- 通过HttpResponse修改响应头
255255- 使用StreamingHttpResponse处理大文件
256256- 使用xlwt生成Excel报表
257257- 使用reportlab生成PDF报表
258258- 使用ECharts生成前端图表
259- - 配置日志和Django-Debug-Toolbar
259+
260+ #### Day46 - [ 日志和调试工具栏] ( ./Day41-55/46.日志和调试工具栏.md )
261+
262+ - 配置日志
263+ - 配置Django-Debug-Toolbar
264+ - 优化ORM代码
260265
261266#### Day47 - [ 中间件的应用] ( ./Day41-55/47.中间件的应用.md )
262267
282287- 使用装饰器实现页面缓存
283288- 为数据接口提供缓存服务
284289
285- #### Day52 - [ 文件上传和富文本编辑 ] ( ./Day41-55/52.文件上传和富文本编辑器 .md )
290+ #### Day52 - [ 文件上传 ] ( ./Day41-55/52.文件上传 .md )
286291
287292- 文件上传表单控件和图片文件预览
288293- 服务器端如何处理上传的文件
289- - 富文本编辑器概述
290- - wangEditor的使用
291-
292- #### Day53 - [ 短信和邮件] ( ./Day41-55/53.短信和邮件.md )
293-
294- - 常用短信网关平台介绍
295- - 使用螺丝帽发送短信
296- - Django框架对邮件服务的支持
297294
298- #### Day54 - [ 异步任务和定时任务] ( ./Day41-55/54 .异步任务和定时任务.md )
295+ #### Day53 - [ 异步任务和定时任务] ( ./Day41-55/53 .异步任务和定时任务.md )
299296
300297- 网站优化第二定律
301298- 配置消息队列服务
You can’t perform that action at this time.
0 commit comments