Django - 页面静态化基本使用(一)

news2025/4/27 13:05:51

一. 前言

一个网页会有很多数据是不需要经常变动的,比如说首页,变动频率低而访问量大,我们可以把它静态化,这样就不需要每次有请求都要查询数据库再返回,可以减少服务器压力
我们可以使用Django的模板渲染功能完成页面渲染

注意:

  • 下面用到的django-crontab是基于Linux系统的crontab,所以Windows系统下是无法运行的,若有需要,可以考虑APSchedulerDjango-apscheduler实现定时任务

二. 什么是页面静态化:

所谓页面静态化,就是提前渲染出完整的html页面,以静态文件的形式存起来,那么下一次浏览器访问的时候,直接返回该静态文件就可以了
1)减少数据库查询次数
2)提高页面响应效率

1.页面静态化的作用:

1)将动态渲染生成的页面结果保存成html文件,放到静态文件服务器中。
2)用户直接去静态服务器,访问处理好的静态html文件。
在这里插入图片描述

2.页面静态化的注意点

1)页面中用户相关数据不能静态化。
2)动态变化的数据不能静态化。

3.django实现页面静态化的步骤:

1)新建一个子应用book(python manage.py startapp book)
在这里插入图片描述
2) 在配置文件中注册子子应用,并且配置数据库

INSTALLED_APPS = [
'book.apps.BookConfig',
	]
DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.mysql',  # 数据库引擎
    'HOST': 'xxxxxxx',  # 数据库主机
    'PORT': 3306,  # 数据库端口
    'USER': 'root',  # 数据库用户名
    'PASSWORD': 'xxxxxxxx',  # 数据库用户密码
    'NAME': 'test'  # 数据库名字
	}
}

3)在book子应用下的modles文件下创建模型(并通过makemigrations,migrate命令生成迁移文件,迁移数据库)

	from django.db import models
	# Create your models here.
	# 准备书籍列表信息的模型类
	class BookInfo(models.Model):
	    # 创建字段,字段类型...
	    name = models.CharField(max_length=20, verbose_name='名称')
	    pub_date = models.DateField(verbose_name='发布日期', null=True)
	    readcount = models.IntegerField(default=0, verbose_name='阅读量')
	    commentcount = models.IntegerField(default=0, verbose_name='评论量')
	    is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')

4)迁移后的数据库(插入数据)

insert into bookinfo(name, pub_date, readcount,commentcount, is_delete) values
('射雕英雄传', '1980-5-1', 12, 34, 0),
('天龙八部', '1986-7-24', 36, 40, 0),
('笑傲江湖', '1995-12-24', 20, 80, 0),
('雪山飞狐', '1987-11-11', 58, 24, 0);

5)准备好的Django中的模板文件
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{{ name }}</title>
</head>
<body>
<ul>
    <li>{{ name }}</li>
    <li>{{ pub_date }}</li>
    <li>{{ readcount }}</li>
    <li>{{ commentcount }}</li>
</ul>
</body>
</html>

6)在book子应用文件夹下新建utils.py文件,并根据需求写入相应代码

import os

# 导入django配置文件
if not os.getenv('DJANGO_SETTINGS_MODULE'):
    os.environ['DJANGO_SETTINGS_MODULE'] = 'testdjango.settings'

import django

django.setup()
# 通过django template子应用下的loader文件进行模板的渲染
from django.template import loader 
from django.conf import settings
# 导入book模型类
from book.models import BookInfo


def generate_static_html(pk):
    try:
        book = BookInfo.objects.get(id=pk)
    except BookInfo.DoesNotExist:
        return
    # 构建上下文
    context = {
        'name': book.name,
        'pub_date': book.pub_date,
        'commentcount': book.commentcount,
        'readcount': book.readcount,
    }
    # 通过loader文件中的get_template方法加载模板文件
    template = loader.get_template('book.html')
    # 渲染上下文到模板文件中
    book_html_text = template.render(context=context)
    # 构建保存路径
    path = os.path.join(settings.BASE_DIR, 'static/' + str(book.id) + '.html')
    with open(path, 'w', encoding='utf-8') as f:
        f.write(book_html_text)

# 程序入口
if __name__ == '__main__':
    for i in range(1, 5):
        print(i)
        generate_static_html(i)

7)在终端下进行入book子应用文件夹下,python utils.py运行此文件或者右击运行,生成以下四个html文件
在这里插入图片描述
8)通过python自带的文件服务器查看效果,进入static文件夹,运行 python -m http.server 8080 --bind 127.0.0.1
在这里插入图片描述
在这里插入图片描述
关于Django - 页面静态化的基本使用介绍完毕,希望对你有所帮助!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/620089.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux | SFTP

SFTP 文章目录 SFTPSSH 文件传输协议连接获取SFTP帮助查看及切换路径遍历远程文件系统访问本地的文件系统 传输文件传输本地文件到远程服务器简单的文件操作图形界面程序Reference欢迎关注公众号【三戒纪元】 SSH 文件传输协议 FTP&#xff0c;即文件传输协议&#xff0c;是一…

Java中的几种关键字详细介绍(秋招总结篇)

前言&#xff1a; 本篇文章主要讲解Java中的几种关键字相关知识。该专栏比较适合刚入坑Java的小白以及准备秋招的大佬阅读。 如果文章有什么需要改进的地方欢迎大佬提出&#xff0c;对大佬有帮助希望可以支持下哦~ 小威在此先感谢各位小伙伴儿了&#x1f601; 以下正文开始 文…

prometheus介绍与安装

prometheus介绍与安装 文章目录 prometheus介绍与安装一、Prometheus 简介1.Prometheus 优势2.Prometheus 基础架构 二、Prometheus 安装1.后端存储配置 三、使用 Prometheus 实现系统监控四、使用 Prometheus Grafana 实现可视化界面四.zabbixgrafana 安装部署参考http://t.c…

【Mininet】基础篇:开源控制器POX

大家好&#xff0c;我是文思月&#xff01; 每文一言&#xff1a;时间不在于你拥有多少&#xff0c;而在于你如何使用&#xff01; 本篇文章&#xff1a; 本篇文章主要是基于POX控制器进行的两个实验&#xff1a;一个是使交换机模拟hub&#xff08;集线器&#xff09;的功能&a…

逍遥自在学C语言 | 宏定义技巧让你的C代码快人一步

前言 在C语言中&#xff0c;宏定义是一种预处理指令&#xff0c;用于在代码中定义和使用常量、函数或代码片段的替代。 宏定义使用#define关键字来定义&#xff0c;并在代码中进行替换。宏定义具有以下优点&#xff1a; 简化代码&#xff1a;宏定义可以将一些常用的、重复出…

MySQL高可用集群解决方案之:lvs+keepalived+mysql cluster实现负载均衡

一&#xff1a;前言 Mysql-cluster本身实现了高可用&#xff0c;但是其sql节点并没有实现负载均衡。怎样让程序能均衡地访问sql节点呢&#xff0c;程序里写哪个数据库服务器IP呢&#xff1f; LVS是实现负载均衡作用的&#xff0c;即将客户端的需求采用特定的负载均衡算法分发…

在职考研 | 对于朝九晚五的上班族来说同等学力申硕更轻松!

我们要知道的是&#xff0c;考在职研究生的群体90%以上都是朝九晚五的上班族。 他们工作忙&#xff0c;时间和精力都很有限。 考研本身难度就很大&#xff0c;但是既拿不出足够多的备考时间&#xff0c;也没法到线下去上课。 怎么能考上呢&#xff1f; 在这样的现实条件下&…

yolov5部署到android studio

目录 环境获取demo将pt文件导出为ptl文件修改demo修改PrePostProcessor增加ptl文件并增加类别文件修改MainActivity 大功告成 环境 Ubuntu22.10 Pytorch2.0.1cu117 Android Studio Flamingo | 2022.2.1 Patch 1 获取demo git clone https://github.com/pytorch/android-demo…

self Attention 位置编码的奇偶输入问题

attention机制一直是放在encoder-decoder中进行使用&#xff0c;self-attention是为了解决前者结构无法并行计算&#xff0c;而抽离出的概念&#xff08;前者的编码解码多为时序网络&#xff09;。 但因为缺少时序模型天然的位置编码特点&#xff0c;所以self-attention模型需要…

Docker镜像大小优化

如何缩小镜像的体积大小&#xff1f; 1&#xff09;尽可能的使用小体积的基础镜像 2&#xff09;尽可能减少Dockerfile文件中的指令数量 3&#xff09;构建镜像步骤最后添加清空系统和应用程序的缓存的命令 4&#xff09;使用多级&#xff08;多阶段&#xff09;构建 FROM A…

亚信科技AntDB数据库荣获赛宝优选信创优秀解决方案奖

近日&#xff0c;由工业和信息化部电子第五研究所主办的中国赛宝信创生态合作伙伴大会暨赛宝优选信创优秀解决方案颁奖仪式在北京成功举办&#xff0c;亚信科技AntDB数据库信创解决方案“业务支撑系统核心数据库迁移改造”从千余案例中脱颖而出&#xff0c;荣获赛宝优选信创优秀…

文件描述符表

文章目录 1. 文件描述符1.1 前言1.2 理解文件1.3 文件描述附表1.4 打开文件时1.5 默认打开的三个文件 2. 重定向2.1 瞅瞅2.2 dup22.3 实现原理 3. 一切皆文件 1. 文件描述符 1.1 前言 环境&#xff1a;Linux 2.6 在 Linux 中&#xff0c;有句话叫做「一切皆文件」&#xff0…

Coinbase:如有必要,不惜在最高法院与SEC“一决胜负”!

6日早间&#xff0c;央视财经频道&#xff08;CCTV-2&#xff09;对“币安及其首席执行官被美证交会&#xff08;SEC&#xff09;起诉”进行了报道。 值得一提的是&#xff0c;央视并不常播报加密货币相关新闻&#xff0c;上一次是关于香港监管框架&#xff0c;赵长鹏&#xff…

< 每日算法:一文带你认识 “ 双指针算法 ” >

每日算法&#xff1a;初识双指针算法 &#x1f449; 1. 双指针概念&#xff1a;&#x1f449; 2. 左右指针> 案例一&#xff1a;二分查找> 案例二&#xff1a;双指针 - 移除元素 &#x1f449; 3. 快慢指针> 案例一&#xff1a; 删除排序数组中的重复项 &#x1f449;…

MySQL8安装详细教程

MySQL8安装详细教程 一、下载二、安装三、配置环境 一、下载 官网下载&#xff1a;点击跳转 进入官网后&#xff0c;如下界面 点击Archives可以选择版本进行下载&#xff0c;如下图根据描述操作即可。 百度云下载链接&#xff1a;点击跳转 或者复制到浏览器打开&#xff1a;链…

【1 微信小程序学习-核心思想与体验】

1 小程序的核心技术 .js文件,负责数据处理,函数定义和实现 .wxml文件,组件结构与数据绑定 .wxss文件,组件样式 .json配置信息补充 MVVM架构实现声明式编程 采用MVVM架构,核心是通过数据绑定实现响应式编程(声明式编程). M:数据处理 V:样式结构 VM:数据绑定和事件监听 vue和小程…

程序员的职场危机,能靠技术化解吗?

很多人认为&#xff0c;程序员一定要干到管理层&#xff0c;才会有继续走下去的希望&#xff0c;而踏实做技术的程序员&#xff0c;只会面临淘汰。 事实真是如此吗&#xff1f; △ 截图来源脉脉&#xff0c;如侵删 我们先不说结论&#xff0c;一起看看网友们的看法&#xff1…

Linux | Job control

Linux | Job control 文章目录 Linux | Job control命令直接将命令丢到后台中“执行”的 &将当前工作丢到后台“暂停”&#xff1a;Ctrl z查看后台工作状态&#xff1a;jobs将后台工作拿到前台处理&#xff1a;fg让工作在后台下的状态变成运行中&#xff1a;bg管理后台工作…

Qt6之vc调用qt生成的带ui的dll

受益于跨平台的特性&#xff0c;Qt生成dll的各种语言调用上体现的淋漓尽致&#xff0c;上篇已经演示了qt生成的无ui的dll及vc如何调用它&#xff0c;本篇将演示vc如何调用qt生成的带ui的dll。 传统观点认为Qt生成的带ui的dll受限于 QApplication 的 exec 方法&#xff0c;这样才…

《精通特征工程》学习笔记(6):非线性特征化与k-均值模型堆叠

1.非线性特征 当数据位于一个薄饼状的线性子空间时&#xff0c;PCA 是非常有用的。但如果数据形成了一个更加复杂的形状&#xff0c;情况又将如何呢&#xff1f; 如果线性子空间是一张平展的纸&#xff0c;那么非线性流形的一个简单例子就是卷起来的纸&#xff0c;它有 个非…