两个方案:
页面静态化
数据库读写分离(参考我之前的博客)
数据库读写分离:
https://blog.csdn.net/weixin_45223595/article/details/108897249
页面静态化:
减少数据库查询次数
提升页面响应效率
注意点:
用户相关的数据不能静态化(用户名、购物车)
动态变化的数据不能静态化(热销排行、推荐、分页排序)
不能静态化的数据处理方案:
在用户得到页面后,在页面中向后端发送Ajax请求获取相应的数据
直接使用模板渲染
页面静态化实现:
查询页面相关数据
# 模拟render(),将一个渲染好的页面写入到文件中
获取页面模板文件
template = loader.get_template('index.html')
渲染页面html字符串
html_text = template.render(context)
将页面html字符串写到指定目录
with open() as f:
f.write(html_text)
这样做的确实现了页面静态化,但是还要一个问题,页面修改后,不能及时静态化修改后的页面
解决方法:
定时器:(django-crontab)
安装:
pip install django-crontab
注册:
'django-crontab'
设置定时任务:
*****(分时日月周)
定时任务:
任务时间
任务方法
任务日志
CRONJOBS = [
('*/1 * * * *', 'contents.crons.generate_static_index_html', '>> ' + os.path.join(os.path.dirname(BASE_DIR), 'logs/crontab.log'))
]
解决中文问题:
CRONTAB_COMMAND_PREFIX = 'LANG_ALL=zh_cn.UTF-8'
管理定时任务:
# 添加定时任务到系统中
python manage.py crontab add
# 显示已激活的定时任务
python manage.py crontab show
# 移除定时任务
python manage.py crontab remove