更新了部分文档
parent
4bec755748
commit
5e2fda29be
|
@ -1,4 +1,4 @@
|
||||||
## 报表
|
## 制作报表
|
||||||
|
|
||||||
### 导出Excel报表
|
### 导出Excel报表
|
||||||
|
|
||||||
|
@ -52,6 +52,26 @@ urlpatterns = [
|
||||||
]
|
]
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### 导出PDF报表
|
||||||
|
|
||||||
|
在Django项目中,如果需要导出PDF报表,可以借助三方库reportlab来生成PDF文件的内容,再将文件的二进制数据输出给浏览器并指定MIME类型为`application/pdf`,具体的代码如下所示。
|
||||||
|
|
||||||
|
```Python
|
||||||
|
def export_pdf(request: HttpRequest) -> HttpResponse:
|
||||||
|
buffer = io.BytesIO()
|
||||||
|
pdf = canvas.Canvas(buffer)
|
||||||
|
pdf.setFont("Helvetica", 80)
|
||||||
|
pdf.setFillColorRGB(0.2, 0.5, 0.3)
|
||||||
|
pdf.drawString(100, 550, 'hello, world!')
|
||||||
|
pdf.showPage()
|
||||||
|
pdf.save()
|
||||||
|
resp = HttpResponse(buffer.getvalue(), content_type='application/pdf')
|
||||||
|
resp['content-disposition'] = 'inline; filename="demo.pdf"'
|
||||||
|
return resp
|
||||||
|
```
|
||||||
|
|
||||||
|
关于如何用reportlab定制PDF报表的内容,可以参考reportlab的[官方文档](https://www.reportlab.com/docs/reportlab-userguide.pdf)。
|
||||||
|
|
||||||
### 生成前端统计图表
|
### 生成前端统计图表
|
||||||
|
|
||||||
如果项目中需要生成前端统计图表,可以使用百度的[ECharts](<https://echarts.baidu.com/>)。具体的做法是后端通过提供数据接口返回统计图表所需的数据,前端使用ECharts来渲染出柱状图、折线图、饼图、散点图等图表。例如我们要生成一个统计所有老师好评数和差评数的报表,可以按照下面的方式来做。
|
如果项目中需要生成前端统计图表,可以使用百度的[ECharts](<https://echarts.baidu.com/>)。具体的做法是后端通过提供数据接口返回统计图表所需的数据,前端使用ECharts来渲染出柱状图、折线图、饼图、散点图等图表。例如我们要生成一个统计所有老师好评数和差评数的报表,可以按照下面的方式来做。
|
||||||
|
@ -62,7 +82,6 @@ def get_teachers_data(request):
|
||||||
names = [teacher.name for teacher in queryset]
|
names = [teacher.name for teacher in queryset]
|
||||||
good_counts = [teacher.good_count for teacher in queryset]
|
good_counts = [teacher.good_count for teacher in queryset]
|
||||||
bad_counts = [teacher.bad_count for teacher in queryset]
|
bad_counts = [teacher.bad_count for teacher in queryset]
|
||||||
# 返回JSON格式的数据
|
|
||||||
return JsonResponse({'names': names, 'good': good_counts, 'bad': bad_counts})
|
return JsonResponse({'names': names, 'good': good_counts, 'bad': bad_counts})
|
||||||
```
|
```
|
||||||
|
|
|
@ -22,20 +22,20 @@ MIDDLEWARE = [
|
||||||
|
|
||||||
我们稍微为大家解释一下这些中间件的作用:
|
我们稍微为大家解释一下这些中间件的作用:
|
||||||
|
|
||||||
1. CommonMiddleware - 基础设置中间件,可以处理以下一些配置参数。
|
1. `CommonMiddleware` - 基础设置中间件,可以处理以下一些配置参数。
|
||||||
- DISALLOWED_USER_AGENTS - 不被允许的用户代理(浏览器)
|
- DISALLOWED_USER_AGENTS - 不被允许的用户代理(浏览器)
|
||||||
- APPEND_SLASH - 是否追加`/`
|
- APPEND_SLASH - 是否追加`/`
|
||||||
- USE_ETAG - 浏览器缓存相关
|
- USE_ETAG - 浏览器缓存相关
|
||||||
2. SecurityMiddleware - 安全相关中间件,可以处理和安全相关的配置项。
|
2. `SecurityMiddleware` - 安全相关中间件,可以处理和安全相关的配置项。
|
||||||
- SECURE_HSTS_SECONDS - 强制使用HTTPS的时间
|
- SECURE_HSTS_SECONDS - 强制使用HTTPS的时间
|
||||||
- SECURE_HSTS_INCLUDE_SUBDOMAINS - HTTPS是否覆盖子域名
|
- SECURE_HSTS_INCLUDE_SUBDOMAINS - HTTPS是否覆盖子域名
|
||||||
- SECURE_CONTENT_TYPE_NOSNIFF - 是否允许浏览器推断内容类型
|
- SECURE_CONTENT_TYPE_NOSNIFF - 是否允许浏览器推断内容类型
|
||||||
- SECURE_BROWSER_XSS_FILTER - 是否启用跨站脚本攻击过滤器
|
- SECURE_BROWSER_XSS_FILTER - 是否启用跨站脚本攻击过滤器
|
||||||
- SECURE_SSL_REDIRECT - 是否重定向到HTTPS连接
|
- SECURE_SSL_REDIRECT - 是否重定向到HTTPS连接
|
||||||
- SECURE_REDIRECT_EXEMPT - 免除重定向到HTTPS
|
- SECURE_REDIRECT_EXEMPT - 免除重定向到HTTPS
|
||||||
3. SessionMiddleware - 会话中间件。
|
3. `SessionMiddleware` - 会话中间件。
|
||||||
4. CsrfViewMiddleware - 通过生成令牌,防范跨请求份伪的造中间件。
|
4. `CsrfViewMiddleware` - 通过生成令牌,防范跨请求份伪的造中间件。
|
||||||
5. XFrameOptionsMiddleware - 通过设置请求头参数,防范点击劫持攻击的中间件。
|
5. `XFrameOptionsMiddleware` - 通过设置请求头参数,防范点击劫持攻击的中间件。
|
||||||
|
|
||||||
在请求的过程中,上面的中间件会按照书写的顺序从上到下执行,然后是URL解析,最后请求才会来到视图函数;在响应的过程中,上面的中间件会按照书写的顺序从下到上执行,与请求时中间件执行的顺序正好相反。
|
在请求的过程中,上面的中间件会按照书写的顺序从上到下执行,然后是URL解析,最后请求才会来到视图函数;在响应的过程中,上面的中间件会按照书写的顺序从下到上执行,与请求时中间件执行的顺序正好相反。
|
||||||
|
|
||||||
|
|
|
@ -662,7 +662,7 @@ def simple_middleware(get_response):
|
||||||
```
|
```
|
||||||
|
|
||||||
```Python
|
```Python
|
||||||
class MyMiddleware(object):
|
class MyMiddleware:
|
||||||
|
|
||||||
def __init__(self, get_response):
|
def __init__(self, get_response):
|
||||||
self.get_response = get_response
|
self.get_response = get_response
|
||||||
|
@ -675,7 +675,7 @@ class MyMiddleware(object):
|
||||||
```
|
```
|
||||||
|
|
||||||
```Python
|
```Python
|
||||||
class MyMiddleware:
|
class MyMiddleware(MiddlewareMixin):
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
pass
|
pass
|
||||||
|
|
21
README.md
21
README.md
|
@ -249,14 +249,19 @@
|
||||||
- Django框架对session的支持
|
- Django框架对session的支持
|
||||||
- 视图函数中的cookie读写操作
|
- 视图函数中的cookie读写操作
|
||||||
|
|
||||||
#### Day46 - [报表和日志](./Day41-55/46.报表和日志.md)
|
#### Day45 - [报表和日志](./Day41-55/45.制作报表.md)
|
||||||
|
|
||||||
- 通过HttpResponse修改响应头
|
- 通过HttpResponse修改响应头
|
||||||
- 使用StreamingHttpResponse处理大文件
|
- 使用StreamingHttpResponse处理大文件
|
||||||
- 使用xlwt生成Excel报表
|
- 使用xlwt生成Excel报表
|
||||||
- 使用reportlab生成PDF报表
|
- 使用reportlab生成PDF报表
|
||||||
- 使用ECharts生成前端图表
|
- 使用ECharts生成前端图表
|
||||||
- 配置日志和Django-Debug-Toolbar
|
|
||||||
|
#### Day46 - [日志和调试工具栏](./Day41-55/46.日志和调试工具栏.md)
|
||||||
|
|
||||||
|
- 配置日志
|
||||||
|
- 配置Django-Debug-Toolbar
|
||||||
|
- 优化ORM代码
|
||||||
|
|
||||||
#### Day47 - [中间件的应用](./Day41-55/47.中间件的应用.md)
|
#### Day47 - [中间件的应用](./Day41-55/47.中间件的应用.md)
|
||||||
|
|
||||||
|
@ -282,20 +287,12 @@
|
||||||
- 使用装饰器实现页面缓存
|
- 使用装饰器实现页面缓存
|
||||||
- 为数据接口提供缓存服务
|
- 为数据接口提供缓存服务
|
||||||
|
|
||||||
#### Day52 - [文件上传和富文本编辑](./Day41-55/52.文件上传和富文本编辑器.md)
|
#### Day52 - [文件上传](./Day41-55/52.文件上传.md)
|
||||||
|
|
||||||
- 文件上传表单控件和图片文件预览
|
- 文件上传表单控件和图片文件预览
|
||||||
- 服务器端如何处理上传的文件
|
- 服务器端如何处理上传的文件
|
||||||
- 富文本编辑器概述
|
|
||||||
- wangEditor的使用
|
|
||||||
|
|
||||||
#### Day53 - [短信和邮件](./Day41-55/53.短信和邮件.md)
|
#### Day53 - [异步任务和定时任务](./Day41-55/53.异步任务和定时任务.md)
|
||||||
|
|
||||||
- 常用短信网关平台介绍
|
|
||||||
- 使用螺丝帽发送短信
|
|
||||||
- Django框架对邮件服务的支持
|
|
||||||
|
|
||||||
#### Day54 - [异步任务和定时任务](./Day41-55/54.异步任务和定时任务.md)
|
|
||||||
|
|
||||||
- 网站优化第二定律
|
- 网站优化第二定律
|
||||||
- 配置消息队列服务
|
- 配置消息队列服务
|
||||||
|
|
Loading…
Reference in New Issue