django rest框架的缓存实例

drf-cached-instances的Python项目详细描述


通过将实例数据存储在缓存中,加快Django REST Framework(drf)读取速度。

这段代码是从browsercompat中分离出来的。你可能会感兴趣 查看BrowserCompat源代码以获取完整的示例实现。

工作原理

在普通drf视图中,django queryset用于加载 物体。序列化程序用于将对象转换为“本机” 表示,然后渲染器处理此本机表示。如果 序列化程序包括来自相关模型的数据,然后是多个数据库 可能需要查询才能生成本机表示。一些数据库 使用select_related可以获得效率,但至少需要一个查询 是必需的,这对于使用大量读取的api来说是不幸的。

这个项目用一个缓存感知代理类替换了django queryset, 使之能够以零个数据库请求服务读请求(到 检索实例)或一个请求(获取列表视图的主键)。 它适用于具有大量读取操作和 相关实例。

使用缓存时,django对象被序列化为json。只有 drf本机表示所需的属性存储在缓存中。 这包括字段的json表示,例如外键、reverse 关系,日期和时间。这些序列化对象由主对象存储 输入缓存。当在缓存中找到实例时,没有数据库读取 需要呈现drf表示。如果实例不在 缓存,它被序列化和存储,以便将来的读取速度更快。

api实现程序编写方法来处理json序列化,从 数据库,并在更改时标识无效的缓存项。有一个 很少有集成点,包括用于从缓存加载数据的视图的混合。 只有对现有代码进行少量更改,您的读取视图可能会更快得多。

项目状态

此代码用于browsercompat项目,该项目从2015年开始开发 -2016年,但自2016年8月起暂停。因为这是 此代码可能需要一段时间才能实现更多功能。

历史

0.3.4(2016-08-14)

  • 放弃对django 1.7、python 2.6的支持
  • 将测试扩展到django 1.10、django rest framework 3.4、python 3.5

0.3.3(2015-11-05)

  • 为datetime.timedelta添加序列化程序,以支持django 1.8 持续时间字段(creynold)
  • 转换日期时间、日期和时间增量的字符串表示形式
  • 将测试扩展到django 1.9beta1和djangorestframework3.3

0.3.2(2015-09-23)

  • 删除django 1.8中的折旧警告
  • 将测试扩展到django master和django rest framework 3.2
  • 修复在mock 1.3.0下中断的无效mock.patch测试
  • 文档更新和修复

0.3.1(2015-06-16)

  • 将GETXObjutoToRo.404移动到MIXIN方法,以便更容易地扩展。

0.3.0(2015-04-09)

  • 用django 1.8进行测试
  • 使用django rest framework 2.4、3.0和3.1进行测试
  • cachedModel现在支持.pk属性作为别名,通常是.id 字段。drf 3使用.pk来确定是否将模型保存到数据库中,并且 返回未保存字段的空关系数据。
  • delete_all_versions()将删除模型和 PK。当在正常请求之外进行更改时,这非常有用,例如 在数据迁移期间。

0.2.0(2014-12-11)

  • update_only选项添加到cache.update_instance,以支持最终 冷缓存的一致性。
0.1.0(2014-11-06)
  • 第一个版本是pypi。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何下载多个。java中的PDF文件   linux Java打开文件,形成实际用户主页~/   java如何在时间线内维护TableView选择?   java Hibernate注释@Where vs@WhereJoinTable   Java读/写访问异常FileNotFoundException(访问被拒绝)   继承在Java中是否可以扩展最后一个类?   Android HttpClient使用java使应用程序崩溃。lang.OutOfMemoryError:pthread_create   java为什么即使我在proguardproject中添加了jar文件,也会出现这种错误。txt?   如果添加JButton,swing Java FocusListener和KeyListener将无法工作   java使用solrj检索json格式的SolrDocument   使用Microsoft Visual Studio代码进行Java编程   java NoClassDefFoundError:org/apache/log4j/Logger   哈希集中包含相等对象的java   java中的参数化构造函数是否需要有一个主体?   java类似于NetBeans不必要的代码检测器   Java实践问题   java Blackberry“[projectname].调试文件丢失”和“I/O错误:找不到程序”jar