1.引入页面静态化:
类似于京东、天猫等商城的首页频繁被访问,为了提升访问速度,除了使用缓存技术外,还可以使用页面静态化技术。
页面静态化即将动态渲染生成的页面结果保存成html文件,放到静态文件服务器中。用户访问的时候访问的直接是处理好之后的html静态文件。
对于页面中属于每个用户展示不同数据内容的部分,可以在用户请求完静态化之后的页面后,在页面中向后端发送请求,获取属于用户的特殊的数据。
2.实现的思路:
- 1.挖坑:前端html代码需要向后端查询数据的部分,先用模板语法填充。例如前端经常使用的’胡子语法’——
{{ 变量 }}
,或者戏称挖坑。 - 2.查询:后端从数据库查询前端具体需要的数据
- 3.填坑:将从数据库里查询的数据填充到指定的模板里面,并存放到静态服务器,用户访问时便可以提升响应速度提升用户体验。
3.注意
在html页面中有可能用到Django的模板语法,也可能会用到前端Vue的模板语法,如果有些模板是Vue从js获取数据而非后端,可以通过在前端中修改Vue的模板变量语法来避免冲突
var vm = new Vue({
el: '#app',
delimiters: ['[[', ']]'],
...
})
通过delimiters声明,将Vue
的模板变量变为了[[ ]]
4.定时任务执行静态化
对于首页的静态化,考虑到页面的数据可能由多名运营人员维护,并且经常变动,所以将其做成定时任务,即定时执行静态化。
在Django执行定时任务,可以通过django-crontab扩展来实现。
- (1)安装
pip install django-crontab
- (2) settings添加应用
INSTALLED_APPS = [
...
'django_crontab', # 定时任务
...
]
- (3)设置任务的定时时间
在配置文件中设置定时执行的时间
每个定时任务分为三部分定义:
- 任务时间
基本格式 :
* * * * *
分 时 日 月 周 命令
M: 分钟(0-59)。每分钟用*或者 */1表示
H:小时(0-23)。(0表示0点)
D:天(1-31)。
m: 月(1-12)。
d: 一星期内的天(0~6,0为星期天)。
-
任务方法
-
任务日志
首页的定时任务设置如下在settings中增加如下配置
# 定时任务
CRONJOBS = [
# 每5分钟执行一次生成主页静态文件
('*/5 * * * *', 'contents.crons.generate_static_index_html', '>> /logs/crontab.log')
]
# 参数1:任务时间 参数2:任务方法 参数3:任务日志保存路径
- 解决中文字符问题
- 在定时任务中,如果出现非英文字符,会出现字符异常错误,可以通过在配置文件中添加定时任务执行的附加命令来实现
# 解决crontab中文问题
CRONTAB_COMMAND_PREFIX = 'LANG_ALL=zh_cn.UTF-8'
5.开启定时任务
添加定时任务到系统中
python manage.py crontab add
显示已经激活的定时任务
python manage.py crontab show
移除定时任务
python manage.py crontab remove