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基本数据类型详细介绍
Mar 11 Python
python抓取网页中图片并保存到本地
Dec 01 Python
Python发送form-data请求及拼接form-data内容的方法
Mar 05 Python
pycham查看程序执行的时间方法
Nov 29 Python
Tensorflow分类器项目自定义数据读入的实现
Feb 05 Python
在Python中字符串、列表、元组、字典之间的相互转换
Nov 15 Python
使用Python操作ArangoDB的方法步骤
Feb 02 Python
Mac中PyCharm配置Anaconda环境的方法
Mar 04 Python
解决django无法访问本地static文件(js,css,img)网页里js,cs都加载不了
Apr 07 Python
Nginx+Uwsgi+Django 项目部署到服务器的思路详解
May 08 Python
Django Form设置文本框为readonly操作
Jul 03 Python
Python tkinter之Bind(绑定事件)的使用示例
Feb 05 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
蝙蝠侠:侠影之谜
2020/03/04 欧美动漫
隐性调用php程序的方法
2009/03/09 PHP
php中使用session_set_save_handler()函数把session保存到MySQL数据库实例
2014/11/06 PHP
php常用字符串比较函数实例汇总
2014/11/24 PHP
WordPress中给媒体文件添加分类和标签的PHP功能实现
2015/12/31 PHP
php curl批处理实现可控并发异步操作示例
2018/05/09 PHP
PHP实现单文件、多个单文件、多文件上传函数的封装示例
2019/09/02 PHP
JavaScript中判断函数是new还是()调用的区别说明
2011/04/07 Javascript
JQuery 图片的展开和伸缩实例讲解
2013/04/18 Javascript
js循环改变div颜色具体方法
2013/06/25 Javascript
使用jQuery中的when实现多个AJAX请求对应单个回调的例子分享
2014/04/23 Javascript
jquery对象访问是什么及使用方法介绍
2016/05/03 Javascript
js HTML5 Canvas绘制转盘抽奖
2020/09/13 Javascript
js实现微博发布小功能
2017/01/12 Javascript
jQuery 实现鼠标画框并对框内数据选中的实例代码
2017/08/29 jQuery
javascript流程控制语句集合
2017/09/18 Javascript
浅谈JavaScript的innerWidth与innerHeight
2017/10/12 Javascript
微信小程序如何实现五星评价功能
2019/10/15 Javascript
Vue 实现CLI 3.0 + momentjs + lodash打包时优化
2019/11/13 Javascript
JS实现碰撞检测效果
2020/03/12 Javascript
[50:45]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第一场
2018/04/10 DOTA
Python中Django 后台自定义表单控件
2017/03/28 Python
Python实现的质因式分解算法示例
2018/05/03 Python
在Pycharm中使用GitHub的方法步骤
2019/06/13 Python
python zip,lambda,map函数代码实例
2020/04/04 Python
django ORM之values和annotate使用详解
2020/05/19 Python
Pretty Little Thing美国:时尚女性服饰
2018/08/27 全球购物
SportsDirect.com马来西亚:英国第一体育零售商
2018/11/21 全球购物
为您的家、后院、车库等在线购物:Spreetail
2019/06/17 全球购物
中班下学期幼儿评语
2014/12/30 职场文书
学习党章心得体会2016
2016/01/15 职场文书
2016年离婚协议书范文
2016/03/18 职场文书
导游词之无锡梅园
2019/11/28 职场文书
MongoDB使用profile分析慢查询的步骤
2021/04/30 MongoDB
Nginx反向代理配置的全过程记录
2021/06/22 Servers
详解CSS3.0(Cascading Style Sheet) 层叠级联样式表
2021/07/16 HTML / CSS