首页广告页面静态化

思考:

  • 美多商城的首页访问频繁,而且查询数据量大,其中还有大量的循环处理。

问题:

  • 用户访问首页会耗费服务器大量的资源,并且响应数据的效率会大大降低。

解决:

  • 页面静态化

1. 页面静态化介绍

1.为什么要做页面静态化

  • 减少数据库查询次数。

  • 提升页面响应效率。

2.什么是页面静态化

  • 将动态渲染生成的页面结果保存成html文件,放到静态文件服务器中。

  • 用户直接去静态服务器,访问处理好的静态html文件。

3.页面静态化注意点

  • 用户相关数据不能静态化:

    • 用户名、购物车等不能静态化。

  • 动态变化的数据不能静态化:

    • 热销排行、新品推荐、分页排序数据等等。

  • 不能静态化的数据处理:

    • 可以在用户得到页面后,在页面中向后端发送Ajax请求获取相关数据。

    • 直接使用模板渲染出来。

    • 其他合理的处理方式等等。

2. 首页页面静态化实现

1.首页页面静态化实现步骤

  • 查询首页相关数据

  • 获取首页模板文件

  • 渲染首页html字符串

  • 将首页html字符串写入到指定目录,命名'index.html'

2.首页页面静态化实现


     
  1. def generate_static_index_html():
  2. "" "
  3. 生成静态的主页html文件
  4. " ""
  5. print( '%s: generate_static_index_html' % time.ctime())
  6. # 获取商品频道和分类
  7. categories = get_categories()
  8. # 广告内容
  9. contents = {}
  10. content_categories = ContentCategory.objects.all()
  11. for cat in content_categories:
  12. contents[cat.key] = cat.content_set.filter(status=True).order_by( 'sequence')
  13. # 渲染模板
  14. context = {
  15. 'categories': categories,
  16. 'contents': contents
  17. }
  18. # 获取首页模板文件
  19. template = loader.get_template( 'index.html')
  20. # 渲染首页html字符串
  21. html_text = template.render(context)
  22. # 将首页html字符串写入到指定目录,命名 'index.html'
  23. file_path = os.path.join(settings.STATICFILES_DIRS[ 0], 'index.html')
  24. with open(file_path, 'w', encoding= 'utf-8') as f:
  25. f.write(html_text)

3.首页页面静态化测试效果


提示:使用Python自带的http.server模块来模拟静态服务器,提供静态首页的访问测试。


     
  1. # 进入到static上级目录
  2. $ cd ~/projects/meiduo_project/meiduo_mall/meiduo_mall
  3. # 开启测试静态服务器
  4. $ python -m http.server 8080 --bind 127.0 .0 .1

3. 定时任务crontab静态化首页

重要提示:

  • 对于首页的静态化,考虑到页面的数据可能由多名运营人员维护,并且经常变动,所以将其做成定时任务,即定时执行静态化。

  • 在Django执行定时任务,可以通过django-crontab扩展来实现。

1.安装 django-crontab

$ pip install django-crontab

     

2.注册 django-crontab 应用


     
  1. INSTALLED_APPS = [
  2. 'django_crontab', # 定时任务
  3. ]

3.设置定时任务


     
  1. 定时时间基本格式 :
  2. * * * * *
  3. 分 时 日 月 周 命令
  4. M: 分钟( 0 -59)。每分钟用 * 或者 */ 1 表示
  5. H:小时( 0 -23)。( 0表示 0点)
  6. D:天( 1 -31)。
  7. m: 月( 1 -12)。
  8. d: 一星期内的天( 0~ 60为星期天)。

定时任务分为三部分定义:

  • 任务时间

  • 任务方法

  • 任务日志


     
  1. CRONJOBS = [
  2. # 每 1分钟生成一次首页静态文件
  3. ( '*/1 * * * *', 'contents.crons.generate_static_index_html', '>> ' + os.path.join(os.path.dirname(BASE_DIR), 'logs/crontab.log'))
  4. ]

解决 crontab 中文问题

  • 在定时任务中,如果出现非英文字符,会出现字符异常错误

CRONTAB_COMMAND_PREFIX = 'LANG_ALL=zh_cn.UTF-8'

     

4.管理定时任务


     
  1. # 添加定时任务到系统中
  2. $ python manage.py crontab add
  3. # 显示已激活的定时任务
  4. $ python manage.py crontab show
  5. # 移除定时任务
  6. $ python manage.py crontab remove

文章知识点与官方知识档案匹配,可进一步学习相关知识

4. crontab只能在Linux運行,windows包括mac都不行,使用django_crontab

詳細參考: https://blog.csdn.net/m0_69082030/article/details/126939574?spm=1001.2014.3001.5502
Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐