在开发过程中,有些视图只是查询数据,而且查询的数据一般不会变化。例如,做地址模块时,省市县都是不会变的。如果用户每次请求地址视图时,都要执行视图返回数据,会给服务端带来不必要的压力。这时候可以用到缓存。

  • 视图缓存的原理

当第一个用户访问地址视图时,返回所有省市县。如果用redis来做缓存存储的话,那么会以键对的方式把数据保存在redis。键是url,值是数据。(当然,两者都会被编码)。接下来有用户访问地址视图时,会先在redis上找,找到的话直接返回。如果找不到,才会到达视图,执行查询等操作,返回给用户。(同时也继续存储在redis)

  • 使用前的配置

(1)安装视图缓存拓展包

pip install drf-extensions

(2)在settings.py上配置

# drf扩展: 缓存配置, 获取省份和区县接口使用到
REST_FRAMEWORK_EXTENSIONS = {
# 缓存时间(1小时)
'DEFAULT_CACHE_RESPONSE_TIMEOUT': 60 * 60,
# 缓存到哪里 (caches中配置的default)
'DEFAULT_USE_CACHE': 'default',
}
  • 怎么用

使用方式有两种。

  • 方式一:在类的方法上添加装饰器实现缓存

示例:

class CityView(views.APIView):
# 如果在使用cache_response装饰器时未指明timeout或者cache参数,则会使用配置文件中的默认配置
@cache_response(timeout=60*60, cache='default')
def get(self, request, *args, **kwargs):
pass
  • 方式二:使用drf-extensions提供的扩展类

1. ListCacheResponseMixin
    用于缓存返回列表数据的视图,与ListModelMixin扩展类配合使用,实际是为list方法添加了cache_response装饰器

2. RetrieveCacheResponseMixin
    用于缓存返回单一数据的视图,与RetrieveModelMixin扩展类配合使用,实际是为retrieve方法添加了cache_response装饰器

3. CacheResponseMixin
    为视图集同时补充List和Retrieve两种缓存,与ListModelMixin和RetrieveModelMixin一起配合使用。

示例:

class AreasViewSet(CacheResponseMixin, ReadOnlyModelViewSet):
...

django给视图添加缓存功能的更多相关文章

  1. ASP.NET MVC系列:为视图添加查询功能

    首先,在MoviesController里添加一个查询方法,代码如下 public ActionResult SearchIndex(string title) { //查询数据库中的电影表 var ...

  2. 11 Django RESTful framework 实现缓存

    01-安装 pip install drf-extensions 02-导入 from rest_framework_extensions.cache.mixins import CacheRespo ...

  3. nginx实现缓存功能

    Nginx从0.7.48版本开始,支持了类似Squid的缓存功能.这个缓存是把URL及相关组合当作Key,用md5编码哈希后保存在硬盘上,所以它可以支持任意URL链接,同时也支持404/301/302 ...

  4. 给AFNetworking添加请求缓存功能实现在没有网络的情况下返回缓存数据

    原理:先给NSURLSession地Configuration设置一个内存和本地代理,原来的网络请求结束后会查找缓存的代理字典,并执行代理对象对应的操作方法,需要做的就是拦截错误的方法,返回缓存的数据 ...

  5. springBoot集成Redis,RedisTmple操作redis和注解实现添加和清空缓存功能

    配置 maven项目进入相关配置 <dependency>    <groupId>org.springframework.boot</groupId>    &l ...

  6. Django: 之用户注册、缓存和静态网页

    Django 用户注册系统 Django 的源码中已经有登录,退出,重设密码等相关的视图函数,在下面这个app中 django.contrib.auth 可以点击对应的版本查看相关源代码:1.9  1 ...

  7. Django:视图

    Django的View(视图) 一,一个简单的视图 下面是一个以HTML文档的形式返回当前日期和时间的视图: from django.http import HttpResponse import d ...

  8. django学习之- 数据缓存

    5种配置:开发调试 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.dummy.DummyCache', # 引擎内存CA ...

  9. 开启 Django 博客的 RSS 功能

    作者:HelloGitHub-追梦人物 文中所涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 博客提供 RSS 订阅应该是标配,这样读者就可以通过一些聚合阅读工具订阅你的博客,时 ...

随机推荐

  1. 洛谷 P2898 [USACO08JAN]haybale猜测Haybale Guessing 解题报告

    [USACO08JAN]haybale猜测Haybale Guessing 题目描述 给一段长度为\(n\),每个位置上的数都不同的序列\(a[1\dots n]\)和\(q\)和问答,每个问答是\( ...

  2. [CQOI2011]放棋子

    想到了50%吧算是. f[i][j][k]表示,前i种,占了j行k列.方案数. 发现,转移要处理:“用c个棋子,占据n行m列”的方案数. 设g[i][j][k]表示,i行j列用k个棋子占的方案数.直接 ...

  3. selenium - webdriver - ActionChains类(鼠标操作)

    ActionChains 类提供了鼠标操作的常用方法: perform(): 执行所有 ActionChains 中存储的行为: context_click(): 右击: double_click() ...

  4. bzoj 1068 [SCOI2007]压缩 区间dp

    [SCOI2007]压缩 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 1644  Solved: 1042[Submit][Status][Discu ...

  5. 允许Traceroute探测

    允许Traceroute探测 漏洞描述: 允许Traceroute探测 漏洞描述 本插件使用Traceroute探测来获取扫描器与远程主机之间的路由信息.攻击者也可以利用这些信息来了解目标网络的网络拓 ...

  6. python读书笔记-《A Byte of Python》中文第三版后半部分

    编辑器:windows,linux 不要用notepad,缩进糟糕 -------------- 5.18缩进 同一层次的语句必须有相同的缩进.每一组这样的语句称为一个块. i = 5 2  prin ...

  7. [技巧篇]16.MyEclipse2014安装SVN插件,在线安装

    这两天想做点东西,但是现在流行的是git,但是军哥的项目是托管到阿里的svn代码当中,所以没有办法,还需要弄SVN,这里不将什么安装SVN等东西 我要求的就是快速入门而已,仅此而已,我安装成功,过程很 ...

  8. [设计篇]01.RESTFUL URI 简单入门设计

    1. HTTP Methods HTTP 常用方法: GET: 获取某个资源. POST: 创建一个新的资源. PUT: 替换某个已有的资源. PATCH: 修改某个已有的资源.-->这个自己没 ...

  9. Java中String的hash函数分析

    转载自:http://blog.csdn.net/hengyunabc/article/details/7198533 JDK6的源码: [java] view plaincopy /** * Ret ...

  10. MyBatis注解Annotation介绍及Demo

     MyBatis注解Annotation介绍及Demo 2014-04-21 17:09:55 标签:Mybatis Annotation 注解 ResultMap SqlBuilder 原创作品,允 ...