zoukankan      html  css  js  c++  java
  • 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方法只执行一次

        

    -----

  • 相关阅读:
    Oracle之PL/SQL学习笔记
    Git常用命令
    Web前端上万字的知识总结
    Objective-C中小怪兽的逻辑
    PHP精选数组函数
    数据库连接字符串方法
    WM_CAP_DRIVER_CONNECT
    GB2312/ANSI编码转中文字符
    opencv播放不了AVI视频的问题
    我的MFC/C++学习笔记 http://blog.bccn.net/CrystalFan/6909
  • 原文地址:https://www.cnblogs.com/JiangLe/p/9021745.html
Copyright © 2011-2022 走看看