Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >django开发中利用 缓存文件 进行页面缓存

django开发中利用 缓存文件 进行页面缓存

作者头像
雷子
发布于 2021-03-15 08:14:02
发布于 2021-03-15 08:14:02
1.2K00
代码可运行
举报
运行总次数:0
代码可运行

首先我们先来了解下浏览器的缓存

浏览器缓存机制

Cache-control策略

Cache-Control与Expires的作用一致,都是指明当前资源的有效期,控制浏览器是否直接从浏览器缓存取数据还是重新发请求到服务器取数据。只不过Cache-Control的选择更多,设置更细致,如果同时设置的话,其优先级高于Expires。

还是上面那个请求,web服务器返回的Cache-Control头的值为max-age=300,即5分钟(和上面的Expires时间一致,这个不是必须的)。

我们看下浏览器的真实的

Last-Modified/If-Modified-Since

Last-Modified/If-Modified-Since要配合Cache-Control使用。

l Last-Modified:标识这个响应资源的最后修改时间。web服务器在响应请求时,告诉浏览器资源的最后修改时间。

l If-Modified-Since:当资源过期时(使用Cache-Control标识的max-age),发现资源具有Last-Modified声明,则再次向web服务器请求时带上头 If-Modified-Since,表示请求时间。web服务器收到请求后发现有头If-Modified-Since 则与被请求资源的最后修改时间进行比对。若最后修改时间较新,说明资源又被改动过,则响应整片资源内容(写在响应消息包体内),HTTP 200;若最后修改时间较旧,说明资源无新修改,则响应HTTP 304 (无需包体,节省浏览),告知浏览器继续使用所保存的cache。

在实际中开发应用中,我们会用到缓存,其实在django开发中我们也能用到缓存,现在django给我们很多缓存方式,我看到的有六种之多吧,可能其余的还有,不在追叙,我采用的是利用文件的缓存,说白了就是把缓存的数据放到请求的电脑中,这样也是减少一部分的服务器的压力,那么来看看我的配置。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        'LOCATION': '/var/tmp/django_cache',

    }
}

这是我们利用缓存文件的缓存,那么我们配置好了,来看下我们的使用,首先我们可以全局缓存

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
使用中间件,经过一系列的认证等操作,如果内容在缓存中存在,则使用FetchFromCacheMiddleware获取内容并返回给用户,
当返回给用户之前,判断缓存中是否已经存在,如果不存在则UpdateCacheMiddleware会将缓存保存至缓存,从而实现全站缓存

设置如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
MIDDLEWARE = [
        'django.middleware.cache.UpdateCacheMiddleware',#放到第一个中间件位置
        # 其他中间件...
        'django.middleware.cache.FetchFromCacheMiddleware',#放到最后一个
    ]

    CACHE_MIDDLEWARE_ALIAS = ""
    CACHE_MIDDLEWARE_SECONDS = ""
    CACHE_MIDDLEWARE_KEY_PREFIX = ""
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  还有就是我们对单独的视图进行缓存:

    方法一:直接应用加入装饰器
    from django.views.decorators.cache import cache_page
@cache_page(60*15)
def ceshi(request):
    posts=Article.objects.filter(tag__name=u'测试')
    post_list = fenye(request, posts=posts)
    return render(request, 'index.html', {'post_list': post_list,})

其实我还用到另外的方式,那就是在url处增加,因为我的是面向对象的编程方式所以我利用下面的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
url(r'^$', cache_page(60*2)(HomeView.as_view()), name='home'),

这样我们配置好,启动我们的项目,然后我们可以去看看我们的缓存是否生效,首先我们看下

可以看到,我在登陆界面做了两分钟的缓存,那么我们来看看我们的文件是否生效呢。

后续我可能会出来一系列的web开发的相关分享。给大家做些分享吧。

希望能够帮助大家。

欢迎大家关注雷子说测试。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 雷子说测试开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Django2.0中文(缓存)
1、settings.py中配置使用memcached缓存: CACHE_BACKEND = 'memcached://172.19.26.240:11211;172.19.26.242:11212;172.19.26.244:11213/' // pip install python-memcached 2、使用数据库做缓存: python manage.py createcachetable [cache_table_name] CACHE_BACKEND = 'db://my_cache_table' 3、使用文件做缓存:需要运行的用户有读写该目录的权限 CACHE_BACKEND = 'file:///var/tmp/django_cache' 4、本地内存: CACHE_BACKEND = 'locmem:///' 5、使用自定义缓存:CACHE_BACKEND = 'path.to.backend://'
用户5760343
2022/05/14
3410
在linux系统下Nginx缓存策略设置方式
在开发调试web的时候,经常会碰到因浏览器缓存(cache)而经常要去清空缓存或者强制刷新来测试的烦恼,提供下apache不缓存配置和nginx不缓存配置的设置。在常用的缓存设置里面有两种方式,都是使用add_header来设置:分别为Cache-Control和Pragma。
用户8989785
2021/10/13
2.3K0
Django(39)使用redis配置缓存[通俗易懂]
  动态网站的基本权衡是,它们是动态的。每次用户请求页面时,Web服务器都会进行各种计算 – 从数据库查询到模板呈现再到业务逻辑 – 以创建站点访问者看到的页面。从处理开销的角度来看,这比标准的文件读取文件系统服务器要耗时多了。对于大多数Web应用程序来说,这种开销并不是什么大问题。因为大多数Web应用程序只是中小型网站,没有拥有一流的流量。但对于中到高流量的站点,尽可能减少开销是至关重要的,这就是缓存的用武之地。缓存某些内容是为了保存昂贵计算的结果,这样就不必在下次执行计算。 Django框架带有一个强大的缓存系统,可以保存动态页面,因此不必为每个请求计算它们。Django提供不同级别的缓存粒度:可以缓存特定视图的输出,也可以只缓存页面中难以生成的部分或者可以缓存整个站点。 Redis是一个内存数据库(现在已经支持内存数据持久化到硬盘当中,重新启动时,会自动从硬盘进行加载),由于其性能极高,因此经常作为中间件、缓存使用。
全栈程序员站长
2022/09/16
2K0
Django(39)使用redis配置缓存[通俗易懂]
【进阶系列】HTTP缓存机制专题
https://www.cnblogs.com/520yang/articles/4807408.html
江中散人_Jun
2023/10/16
3760
【进阶系列】HTTP缓存机制专题
浏览器 HTTP 协议缓存机制详解
最近在准备优化日志请求时遇到了一些令人疑惑的问题,比如为什么响应头里出现了两个 cache control、为什么明明设置了 no cache 却还是发请求,为什么多次访问时有时请求里带了 etag,有时又没有带?等等。。。 后来查了一些资料以及同事亲自验证,总算对这些问题有了个清晰的理解,现在整理出来以备忘。 1、缓存的分类 缓存分为服务端侧(server side,比如 Nginx、Apache)和客户端侧(client side,比如 web browser)。 服务端缓存又分为 代理服务器缓存 和
用户1177713
2018/02/24
1.5K0
浏览器 HTTP 协议缓存机制详解
Web缓存 - HTTP协议缓存
Web缓存一般分为浏览器缓存、代理服务器缓存以及网关缓存,本文主要讲的是 浏览器缓存,其它两种缓存大家自行去了解下。
laixiangran
2018/07/25
1K0
Web缓存 - HTTP协议缓存
图解浏览器缓存
浏览器缓存,是浏览器端保存数据,用于快速读取或避免重复资源请求的优化机制,有效的缓存使用可以避免重复的网络请求和加快页面速度,从而提高用户体验。
前端林子
2018/09/22
4.2K0
图解浏览器缓存
web浏览器缓存机制_网站利用浏览器缓存
因为在接手的项目中用到过比较新的HTML5应用缓存,也用到了经典的缓存如设置max-age,Etag之类,而之前一直就是在用着没有去深究其中原理。周末天气不好,懒得出去了,正好找时间总结下。
全栈程序员站长
2022/11/03
9530
前端性能优化(二)——浏览器缓存机制
浏览器缓存对于前端一点都不陌生,最常见的就是,新版本上线了,测试却说这怎么还没有变化呢?使用 ctr + F5 强制刷新之后,立马就好了。或者清除浏览器缓存,按住ctr+shift+delete,弹出如图:
呆呆
2021/09/30
4830
前端网络高级篇(三)浏览器缓存
浏览器缓存有多种形式,持久化或者会话存储。以chrome为例,打开调试面板,找到Application选项卡,就可以看到它所支持的各种缓存模式
娜姐
2022/01/20
9520
前端网络高级篇(三)浏览器缓存
亿级流量客户端缓存之Http缓存与本地缓存对比
客户端缓存分为Http缓存和本地缓存,使用缓存好处很多,例如减少相同数据的重复传输,节省网络带宽资源缓解网络瓶颈,降低了对原始服务器的要求,避免出现过载,这样服务器可以更快响应其他的请求
架构之家
2022/09/01
1.8K0
亿级流量客户端缓存之Http缓存与本地缓存对比
如何让浏览器不缓存文件
最近在项目开发中遇到一个需求:项目打包后,可以根据修改配置文件,进而动态替换页面上的文本。由于项目基本不涉及到后端,因此不考虑通过接口来修改。这就需要前端项目打包后需要暴露一个配置文件,每次页面刷新时会获取到最新的配置,达到动态替换页面文本的目的。
chuckQu
2022/08/19
2.8K0
掌握缓存,不再让你蓝瘦香菇 —— 祝各位程序员节日快乐!
本文内容概要: 1 Web缓存是什么?为什么要使用它? 2 Web缓存的类型 3 浏览器缓存的基本知识 3.1 Expires 3.2 Last-modified 3.3 Cache-Control 3.4 ETag 4 浏览器缓存机制 4.1 强缓存应用 4.2 协商缓存应用 4.3 强缓存与协商缓存的区别 5 浏览器缓存的流程 6 浏览器缓存的优化 1 Web缓存是什么?为什么要使用它 Web缓存是介于服务器与客户端之间。服务器可能是源服务器(因为中间可能会有代理服务器),就是网站资源所在的服务器。客
HTML5学堂
2018/03/13
6870
掌握缓存,不再让你蓝瘦香菇 —— 祝各位程序员节日快乐!
当我们在谈论HTTP缓存时我们在谈论什么
前言 在浏览器众多缓存中的HTTP缓存可能很多人对这个的概念并没有很清晰,每个人都知道进入一次网页之后再刷新一次页面,加载速度会比首次加载快非常多,每个人都知道这是浏览器缓存的magic,但是对此背后
腾讯NEXT学位
2018/06/13
8570
浅谈Web缓存
在前端开发中,性能一直都是被大家所重视的一点,然而判断一个网站的性能最直观的就是看网页打开的速度。其中提高网页反应速度的一个方式就是使用缓存。一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟,并且由于缓存文件可以重复利用,还可以减少带宽,降低网络负荷。那么下面我们就来看看服务器端缓存的原理。
李维亮
2021/07/08
9970
PHP 浏览器缓存_php缓存引擎
浏览器缓存动态内容,缓存的内容在浏览器本地,而内容由web服务器生成,任何一方都不可能完成这一系列过程,他们之间有一种沟通机制,这就是缓存协商.
全栈程序员站长
2022/11/07
2.2K0
浅谈浏览器缓存
最近在项目中遇到了IE浏览器因缓存问题未能成功向后端发送GET类型请求的bug,然后顺藤摸瓜顺便看了看缓存的知识,觉得有必要总结一下。
前端下午茶
2018/10/22
1.5K0
浅谈浏览器缓存
HTTP缓存机制的Etag、Last-Modified、If-None-Match和If-Modified-Since、Expires和Cache-Control笔记
    Etag由服务器端生成,客户端通过If-None-Match这个条件请求来验证资源是否修改。请求一个文件的流程可能如下:
砖业洋__
2023/05/06
2.5K0
HTTP缓存机制的Etag、Last-Modified、If-None-Match和If-Modified-Since、Expires和Cache-Control笔记
浏览器缓存机制浅析--HTTP缓存
浏览器缓存机制,其实主要就是HTTP协议定义的缓存机制(如: Expires; Cache-control等)。但是也有非HTTP协议定义的缓存机制,如使用HTML Meta 标签,Web开发者可以在HTML页面的<head>节点中加入<meta>标签,代码如下:
Clearlove
2019/08/29
9970
浏览器缓存机制浅析--HTTP缓存
【前端基础进阶】浏览器的缓存机制
缓存可以说是性能优化中简单高效的一种优化方式了。一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟,并且由于缓存文件可以重复利用,还可以减少带宽,降低网络负荷。 对于一个数据请求来说,可以分为发起网络请求、后端处理、浏览器响应三个步骤。浏览器缓存可以帮助我们在第一和第三步骤中优化性能。比如说直接使用缓存而不发起请求,或者发起了请求但后端存储的数据和前端一致,那么就没有必要再将数据回传回来,这样就减少了响应数据。 接下来的内容中我们将通过缓存位置、缓存策略以及实际场景应用缓存策略来探讨浏览器缓存机制。
super.x
2019/04/12
6190
【前端基础进阶】浏览器的缓存机制
相关推荐
Django2.0中文(缓存)
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验