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

原文地址:https://www.cnblogs.com/zengxm/p/11320181.html