因为缓存的原因,不停的刷新浏览器时会发现,页面上显示的时间每15秒钟变化一次.
在立即刷新浏览器的时候,立即在数据库中添加一个用户对象,此时继续刷新浏览器,前端页面上不会显示刚才添加的用户
一直刷新浏览器15秒后,新添加的用户才用在前端页面上显示出来.
上面的例子是基于内存的缓存配置,基于文件的缓存该怎么配置呢??
更改settings.py的配置
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', # 指定缓存使用的引擎
'LOCATION': 'E:\django_cache', # 指定缓存的路径
'TIMEOUT': 300, # 缓存超时时间(默认为300秒,None表示永不过期)
'OPTIONS': {
'MAX_ENTRIES': 300, # 最大缓存记录的数量(默认300)
'CULL_FREQUENCY': 3, # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
}
}
}
然后再次刷新浏览器,可以看到在刚才配置的目录下生成的缓存文件
通过实验可以知道,Django会以自己的形式把缓存文件保存在配置文件中指定的目录中.
3.2 全站使用缓存
既然是全站缓存,当然要使用Django中的中间件.
用户的请求通过中间件,经过一系列的认证等操作,如果请求的内容在缓存中存在,则使用FetchFromCacheMiddleware获取内容并返回给用户
当返回给用户之前,判断缓存中是否已经存在,如果不存在,则UpdateCacheMiddleware会将缓存保存至Django的缓存之中,以实现全站缓存
修改settings.py配置文件
MIDDLEWARE = [
'django.middleware.cache.UpdateCacheMiddleware', #响应HttpResponse中设置几个headers
'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', #用来缓存通过GET和HEAD方法获取的状态码为200的响应
]
CACHE__MIDDLEWARE_SECONDS=15 # 设定超时时间为15秒
views视图函数
from django.shortcuts import render
import time
def index(request):
ctime = time.time()
return render(request,'index.html',{'ctime':ctime})
其余代码不变,刷新浏览器是15秒,页面上的时间变化一次,这样就实现了全站缓存.
3.3 局部视图缓存
例子,刷新页面时,整个网页有一部分实现缓存
views视图函数
from django.shortcuts import render
import time
def index(request):
# user_list = models.UserInfo.objects.all()
ctime = time.time()
return render(request,'index.html',{'ctime':ctime})
前端网页
{% load cache %} # 加载缓存