博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django实战----页面静态化
阅读量:2094 次
发布时间:2019-04-29

本文共 3316 字,大约阅读时间需要 11 分钟。

关于页面静态化

前言:

因为代码在windows上运行,Linux上的定时任务无法使用,正常来说要把页面静态化的脚本做成定时任务,每过一段时间自动渲染一次,因为MySQL内的数据是会变化的

为什么要做页面静态化

  1. 减少数据库查询次数。
  2. 提升页面响应效率。

具体的做法

  1. 将动态渲染生成的页面结果保存成html文件,放到静态文件服务器中。
  2. 用户直接去静态服务器,访问处理好的静态html文件。

哪些数据不能静态化处理

  1. 用户相关数据不能静态化:
    1.1 用户名、购物车等不能静态化。
  2. 动态变化的数据不能静态化:
    2.1热销排行、新品推荐、分页排序数据等等。
  3. 不能静态化的数据处理:
    3.1 可以在用户得到页面后,在页面中向后端发送Ajax请求获取相关数据。
    3.2 直接使用模板渲染出来。
    3.3 其他合理的处理方式等等。

渲染index.html静态化(代码)

  1. 查询相关的数据 组织成前端模板需要的数据
  2. 加载需要渲染的模板
    2.1 获取模板对象 loader模块的get_template(‘模板名字’)方法
    from django.template import loader
    index_template = loader.get_template('index.html')
  3. 数据渲染到模板上面
    3.1 render方法(数据)
    index_html_data = index_template.render(context)
  4. 把渲染完成后的模板放入到静态服务器中

代码

import osfrom apps.contents.models import ContentCategoryfrom meiduo_market import settingsfrom utils.goods import get_categoriesdef generate_static_index_html():    # 1查询相关数据    # 获取频道和分类数据    categories = get_categories()    # 广告数据    contents = {
} # 所有广告分类 content_categories = ContentCategory.objects.all() # 遍历 获取分类下所有广告 添加到字典 for cat in content_categories: contents[cat.key] = cat.content_set.filter(status=True).order_by('sequence') # 渲染模板的上下文 context = {
'categories': categories, 'contents': contents, } # 2加载需要渲染模板 from django.template import loader # 获取模板对象 index_template = loader.get_template('index.html') # 3把数据渲染到模板上 index_html_data = index_template.render(context) # 4把渲染好的模板保存成html文件,写入到指定文件 # settings.BASE_DIR /home/halon/Desktop/meiduo_pro/meiduo # os.path.dirname(settings.BASE_DIR) /home/halon/Desktop/meiduo_pro # / home / halon / Desktop / meiduo_pro/front_end_pc/index.html file_path = os.path.join(os.path.dirname(settings.BASE_DIR), 'front_end_pc/index.html') print(file_path) with open(file_path, 'w', encoding='utf-8') as f: f.write(index_html_data)

渲染商品详情页面(代码)

  1. 加载Django环境
# 加载django环境import osos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'meiduo.settings')import djangodjango.setup()
  1. 查询出相关数据 组织成前端需要的数据格式
  2. 加载需要渲染的模板
  3. 渲染模板
  4. 保存渲染后的模板到指定位置

代码

#!/usr/bin/env pythonimport syssys.path.insert(0, '../')# 加载django环境import osos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'meiduo.settings')import djangodjango.setup()from apps.goods.models import SKUfrom utils.goods import get_goods_specs, get_categories, get_breadcrumbfrom django.conf import settingsfrom apps.goods import modelsdef generate_static_sku_detail_html(sku_id):    # - 1查询相关数据    """提供商品详情页"""    # 获取当前sku的信息    sku = SKU.objects.get(id=sku_id)    # 查询商品频道分类    categories = get_categories()    # 查询面包屑导航    breadcrumb = get_breadcrumb(sku.category)    # 获取规格    specs = get_goods_specs(sku)    # 渲染页面    context = {
'categories': categories, 'breadcrumb': breadcrumb, 'sku': sku, 'specs': specs, } # - 2加载需要渲染模板 from django.template import loader # 获取模板对象 index_template = loader.get_template('detail.html') # 3把数据渲染到模板上 index_html_data = index_template.render(context) # 4把渲染好的模板保存成html文件写入到指定文件 file_path = os.path.join(os.path.dirname(settings.BASE_DIR), 'front_end_pc/goods/' + str(sku_id) + '.html') with open(file_path, 'w') as f: f.write(index_html_data)if __name__ == '__main__': skus = models.SKU.objects.all() for sku in skus: print(sku.id) generate_static_sku_detail_html(sku.id)

转载地址:http://jquhf.baihongyu.com/

你可能感兴趣的文章
Oracle 查看和扩展表空间
查看>>
记一次线上Java程序导致服务器CPU占用率过高的问题排除过程
查看>>
Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结
查看>>
从cpu和内存来理解为什么数组比链表查询快
查看>>
CentOS7下使用YUM安装MySQL5.6
查看>>
JVM内存空间
查看>>
Docker 守护进程+远程连接+安全访问+启动冲突解决办法 (完整收藏版)
查看>>
从零写分布式RPC框架 系列 2.0 (4)使用BeanPostProcessor实现自定义@RpcReference注解注入
查看>>
Java 设计模式 轻读汇总版
查看>>
Paxos学习笔记及图解
查看>>
深入解析Spring使用枚举接收参数和返回值机制并提供自定义最佳实践
查看>>
数据序列化框架——Kryo
查看>>
布隆过滤器(BloomFilter)——应用(三)
查看>>
MPP架构数据库优化总结——华为LibrA(MPPDB、GuassDB)与GreenPlum
查看>>
Spark代码可读性与性能优化——示例七(构建聚合器,以用于复杂聚合)
查看>>
Spark代码可读性与性能优化——示例八(一个业务逻辑,多种解决方式)
查看>>
简单理解 HTTPS
查看>>
简单理解 NAT
查看>>
RPC框架——Thrift简单示例
查看>>
RPC框架——gRPC简单示例
查看>>