zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    HTTP 错误 500.21
    《21天学通C#》给多个变量赋值
    《21天学通C#》变量使用前需要声明和赋值,赋值后可以重新赋新的值
    《21天学通C#》课后习题:编写代码将你的名字打印到控制台
    《21天学通C#》数字前面补0
    《21天学通C#》将写的代码原封不动的在控制台显示
    《21天学通C#》Write和WriteLine的区别
    《21天学通C#生成XML文件
    《21天学通C#》嵌套循环,输出上三角形X。
    Scala之隐式转换implicit详解
  • 原文地址:https://www.cnblogs.com/zengxm/p/11320181.html
Copyright © 2011-2022 走看看