django开发教程之利用缓存文件进行页面缓存的方法


Posted in Python onNovember 10, 2017

前言

由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者Redis中,5分钟内再有人来访问时,则不再去执行view中的操作,而是直接从内存或者Redis中之前缓存的内容拿到,并返回。

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

浏览器缓存机制

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

django开发教程之利用缓存文件进行页面缓存的方法

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

django开发教程之利用缓存文件进行页面缓存的方法

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

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

CACHES = {
 'default': {
  'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
  'LOCATION': '/var/tmp/django_cache',

 }
}

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

使用中间件,经过一系列的认证等操作,如果内容在缓存中存在,则使用FetchFromCacheMiddleware获取内容并返回给用户,当返回给用户之前,判断缓存中是否已经存在,如果不存在则UpdateCacheMiddleware会将缓存保存至缓存,从而实现全站缓存

设置如下:

MIDDLEWARE = [
  'django.middleware.cache.UpdateCacheMiddleware',#放到第一个中间件位置
  # 其他中间件...
  'django.middleware.cache.FetchFromCacheMiddleware',#放到最后一个
 ]
 
 CACHE_MIDDLEWARE_ALIAS = ""
 CACHE_MIDDLEWARE_SECONDS = ""
 CACHE_MIDDLEWARE_KEY_PREFIX = ""

还有就是我们对单独的视图进行缓存:

方法一:直接应用加入装饰器

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处增加,因为我的是面向对象的编程方式所以我利用下面的。

url(r'^$', cache_page(60*2)(HomeView.as_view()), name='home'),

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

django开发教程之利用缓存文件进行页面缓存的方法

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

django开发教程之利用缓存文件进行页面缓存的方法

这样可以证明我们现在的缓存是成功的,其实我们还可以利用redis等来缓存。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python中使用百度音乐搜索的api下载指定歌曲的lrc歌词
Jul 18 Python
Python中operator模块的操作符使用示例总结
Jun 28 Python
用pickle存储Python的原生对象方法
Apr 28 Python
pandas中去除指定字符的实例
May 18 Python
Python使用pickle模块储存对象操作示例
Aug 15 Python
对Python多线程读写文件加锁的实例详解
Jan 14 Python
Pytorch基本变量类型FloatTensor与Variable用法
Jan 08 Python
python使用pyecharts库画地图数据可视化的实现
Mar 25 Python
python3实现将json对象存入Redis以及数据的导入导出
Jul 16 Python
Python 读取位于包中的数据文件
Aug 07 Python
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
Jun 08 Python
Elasticsearch 基本查询和组合查询
Apr 19 Python
python使用邻接矩阵构造图代码示例
Nov 10 #Python
python先序遍历二叉树问题
Nov 10 #Python
简单了解OpenCV是个什么东西
Nov 10 #Python
python的文件操作方法汇总
Nov 10 #Python
python使用正则表达式的search()函数实现指定位置搜索功能
Nov 10 #Python
Python3调用微信企业号API发送文本消息代码示例
Nov 10 #Python
Python实现图片滑动式验证识别方法
Nov 09 #Python
You might like
PHP 下载文件时如何自动添加bom头及解释BOM头和去掉bom头的方法
2016/01/04 PHP
PHP给源代码加密的几种方法汇总(推荐)
2018/02/06 PHP
niceTitle 基于jquery的超链接提示插件
2010/05/31 Javascript
深入理解javascript的执行顺序
2014/04/04 Javascript
jquery实现的一个简单进度条效果实例
2014/05/12 Javascript
jQuery取得设置清空select选择的文本与值
2014/07/08 Javascript
javascript实现节点(div)名称编辑
2014/12/17 Javascript
jQuery延迟加载图片插件Lazy Load使用指南
2015/03/25 Javascript
js日期插件dateHelp获取本月、三个月、今年的日期
2016/03/07 Javascript
jquery判断checkbox是否选中及改变checkbox状态的实现方法
2016/05/26 Javascript
微信小程序开发之圆形菜单 仿建行圆形菜单实例
2016/12/12 Javascript
jQuery实现在新增加的元素上添加事件方法案例分析
2017/02/09 Javascript
原生js实现吸顶效果
2017/03/13 Javascript
vue.js实现格式化时间并每秒更新显示功能示例
2018/07/07 Javascript
详解react native页面间传递数据的几种方式
2018/11/07 Javascript
微信小程序自定义yPicker组件实现省市区三级联动功能
2020/10/29 Javascript
解决nuxt 自定义全局方法,全局属性,全局变量的问题
2020/11/05 Javascript
[39:08]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第一场 12.12
2020/12/16 DOTA
详解Django中的ifequal和ifnotequal标签使用
2015/07/16 Python
基于windows下pip安装python模块时报错总结
2018/06/12 Python
django框架auth模块用法实例详解
2019/12/10 Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
2020/09/17 Python
Python读写csv文件流程及异常解决
2020/10/20 Python
英国在线药房:Chemist.co.uk
2019/03/26 全球购物
荷兰美妆护肤品海淘网站:Beautinow(中文)
2020/11/22 全球购物
有针对性的求职自荐信
2013/11/14 职场文书
党章培训心得体会
2014/09/04 职场文书
爱的奉献演讲稿
2014/09/10 职场文书
开幕式邀请函
2015/01/31 职场文书
小学三八妇女节活动总结
2015/02/06 职场文书
挂职锻炼工作总结2015
2015/05/28 职场文书
庆祝教师节新闻稿
2015/07/17 职场文书
幼儿园教师教育随笔
2015/08/14 职场文书
新学期新寄语,献给新生们!
2019/11/15 职场文书
python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
2021/04/14 Python
Win11 BitLocker 驱动器加密
2022/04/19 数码科技