django 从零开始 10 缓存控制
设置django缓存,比如一些访问频繁的页面 首页 并且不需要进行太大的变化,那么可以设置为一定是时间内请求该url视图 不经过视图计算直接返回缓存的内容
django文档选择了几种方式,但是我这边只尝试 文件缓存
第一种 全局缓存
首先只settings中设置缓存方式
注意 这是全局缓存,不管你有没有在视图函数上进行缓存装饰,不论你访问什么url 都会给你缓存 默认600s
# 这是保存在文件夹系统中 注意是绝对位置(从根目录开始),必须保证服务器对你列出的路径具有读写权限
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
'LOCATION': r'C:\Users',#windows下的示例 我实在win下开发 没有则创建该文件夹 不然出错 Linux 也是
'TIMEOUT': 300, 全局缓存时间 'OPTIONS':{
'MAX_ENTRIES': 300, # 最大缓存个数(默认300)
'CULL_FREQUENCY': 3,
# 缓存到达最大个数之后,Django会自动清空3/1 ,设置为10 就剔除10/1
}
}
}
并在中间件设置以下
在settings.py文件中对中间件进行一个设置(我没设置也能用??) 最开始和最后面
MIDDLEWARE = [ # 在中间件最开始添加该字段
'django.middleware.cache.UpdateCacheMiddleware', # django 自带的
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware', # 末尾添加该字段
'django.middleware.cache.FetchFromCacheMiddleware',
]
第二种 局部缓存 (视图缓存)
貌似保存在内存中
在views.py中对函数进行一个装饰
# 比如以下测试函数
from django.views.decorators.cache import cache_page
@cache_page(60*3) # 三分钟缓存
def abc(request,code):
path = reverse('user:abc', args=(code,))
print(path)
return HttpResponse('<a href='+path+'>%s</a>' % path)
urls 设置为
urlpatterns = [ path(r'abc/<int:code>',abc,name='abc'), ]
进行一个测试
显示出时间为 max_age=180 秒说明设置成功 ,并在settings中设置的缓存文件地址中出现了 缓存文件
除了第一次请求 视图进行了计算,第二次第三次...都是没有进行一个计算,直接返回了
这边进行一个等待
我设置3分钟缓存,但是等待了一段时间再次请求同一个url 能看到再次进行了计算
如果每次参数不同,默认会去缓存文件夹中查找有没有存在的缓存,如果不拥有则重新计算添加缓存
第三种 模板缓存
pass
第四种 上游缓存
比如nginx 缓存,服务商缓存 pass
更新 有一个问题, 全局缓存对所有的识图进行一个缓存 装饰器缓存对装饰的视图函数
如果有一些页面是私人页面,比如 a用户访问个人用户资料页面,b用户也访问用户资料页面,按照先后顺序,进行了一个缓存,那么b访问的个人页面是a用户的缓存(一般是查询页面进行缓存,这里我们就不计较了),所以需要一些特殊手段进行一个判断,比如cookies
我暂时还没有去实现,展示先发一个说的文章 http://djangobook.py3k.cn/2.0/chapter15/
引用
https://www.cnblogs.com/hepingqingfeng/p/6656252.html
https://www.cnblogs.com/alexzhang92/p/9529708.html
https://www.cnblogs.com/sss4/p/7563423.html
django 从零开始 10 缓存控制的更多相关文章
- “全能”选手—Django 1.10文档中文版Part1
本文是博主翻译的Django1.10版本官方文档的第一部分,如时间充裕,争取一直翻译下去,经验不足,或有错漏,敬请指正. 另外对于公开文档进行翻译的版权问题不是很清楚,如有侵权请联系我! 另外,要转载 ...
- Django缓存机制--rest_framework中节流源码使用的就是django提供的缓存api
一.配置缓存 https://www.jb51.net/article/124434.htm 二.缓存全站.页面.局部 三.自我控制的简单缓存API API 接口为:django.core.c ...
- Django 1.10文档中文版Part1
目录 第一章.Django1.10文档组成结构1.1 获取帮助1.2 文档的组织形式1.3 第一步1.4 模型层1.5 视图层1.6 模板层1.7 表单1.8 开发流程1.9 admin站点1.10 ...
- Django 中的缓存问题
Django 中的缓存问题 简单介绍 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的 ...
- Android okHttp网络请求之缓存控制Cache-Control
前言: 前面的学习基本上已经可以完成开发需求了,但是在项目中有时会遇到对请求做个缓存,当没网络的时候优先加载本地缓存,基于这个需求我们来学习一直okHttp的Cache-Control. okHttp ...
- “全能”选手—Django 1.10文档中文版Part3
Django 1.10官方文档的入门教程已经翻译完毕,后续的部分将不会按照顺序进行翻译,而是挑重点的先翻译. 有兴趣的可以关注我的博客. 第一部分传送门 第二部分传送门 第四部分传送门 3.2 模型和 ...
- PHP flush sleep 输出缓存控制详解
1 2 3 4 5 6 ob_start,flush,ob_flush for($i=0;$i<</SPAN>10;$i++) { echo $i.''; flush(); slee ...
- 重新想象 Windows 8.1 Store Apps (90) - 通信的新特性: 通过 HttpBaseProtocolFilter 实现 http 请求的缓存控制,以及 cookie 读写; 自定义 HttpFilter; 其他
[源码下载] 重新想象 Windows 8.1 Store Apps (90) - 通信的新特性: 通过 HttpBaseProtocolFilter 实现 http 请求的缓存控制,以及 cooki ...
- 基于maven插件的缓存控制插件
asset-cache-control github源码及下载地址: https://github.com/StruggleBird/asset-cache-control 基于maven插件的缓存控 ...
随机推荐
- Qt QThread必须要了解的几个函数
概述 如果想对Qt中的QThread有个更加深刻的了解,必须要知道这几个重要的函数,现在就一一介绍下. 函数介绍 属性 返回值 函数体 功能 static QThread * QThread::cur ...
- axious设置携带cookie同时允许跨域的问题
axious设置携带cookie同时允许跨域的问题
- python学习笔记(0)python基础概念
一.字符集 说字符集之前,先说下2进制的故事,计算机比较傻只认识2进制,什么是2进制,就是0,1,计算机只认识这俩数字,其他的都不认识,这样的0或1为一"位",规定8位为一个字节, ...
- python与正则不得不说的故事
今日所得 正则表达式 re模块 正则表达式:字符 元字符 匹配内容 . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线 \s 匹配任意的空白符 \d 匹配数字 \n 匹配一个换行符 \t 匹 ...
- 关于php自学
自己本人现在正在自学php有一段时间了,不知道现在的学习状态咋样,在我看来应该属于不算很糟糕,但有点糟糕的状态. 如果算学习自学php的话,现在断断续续应该是有5个月了,按理说是差不多可以做出独立项目 ...
- mac安装并配置nexus3.5.1版本
一.安装nexus 前置条件 :已经安装了JDK 1:下载nexus(http://www.sonatype.com/download-oss-sonatype) 最新版本(我的是3.5.1). 2: ...
- 将js进行到底:node学习10
node.js数据库篇--MySQL NoSQL大行其道的如今,MySQL这样的关系型数据库依然有着不可撼动的位置,对于中型,大型面向对象的项目,关系型数据库依然是首选,真正的项目,应当是将数据库的任 ...
- SpringMVC之添加照片并修改照片名字
@RequestMapping(value="/addIdcardsSubmit",method={RequestMethod.POST,RequestMethod.GET}) p ...
- myeclipse安装插件svn的步骤
下载插件地址:http://subclipse.tigris.org/ 方法一:本地安装 1.打开HELP->MyEclipse Configuration或者myeclipse->MyE ...
- rsync auth failed on module xxx
rsync 报错 "auth failed on module xxx", 一般有三种情况造成: 密码文件格式错误: 服务端密码文件的格式是: user:password 每个一行 ...