django缓存基于类的视图

 

引子:

  有些场景下由于数据库中的数据很长时间内都不会发生变化,如果每次调用view都要去查询一次数据库的话,明显是多做了一些无用

  工的;django中可以通过装饰器方便的实现view的缓存。

 

为什么class-based-view中的方法不能直接装饰:

   由于class-based-view中的方法与function-based-view在内部处理上有着本质上的不同、所以不能直接装饰方法;要通过method_decorator来适配

 

怎么做:

  1、要缓存首先就要解决把数据缓存在哪里的问题;常见的可以用来保存缓存对象的地方有“内存”,“数据库”,“文件系统” 等等..... 下面以把数据缓存

  到文件内存为例讲解django应该怎么配置。缓存的目标位置是通过配置来决定的、

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
    }
}

  

  2、给方法增加装饰、以把它标记为是要缓存的对象、示例代码如下:

from django.shortcuts import render
from django.views import View
from django.http import HttpResponse
from django.utils.decorators import method_decorator
from django.views.decorators.cache import cache_page
# Create your views here.


class HelloPage(View):
    @method_decorator(cache_page(60*60*24))
    def get(self,request):
        print("enter HelloPage.get")

        return HttpResponse('Hello world ...')

   对于class-based-veiw来说不能直接通过cache_page来装饰了、要通过method_decorator来适配一下。

 

对比:

  1、没有缓存的情况下每一次访问HelloPage.get方法都要被执行

      

 

    2、有缓存的情况下HelloPage.get方法只执行一次

    

 

 

 

 

-----

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值