页面静态化思想以及Django的定时任务

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

猜你喜欢

转载自blog.csdn.net/qq_38923792/article/details/91867935