跳转到主要内容

Django REST Framework的缓存实例

项目描述

通过在缓存中存储实例数据来加速Django REST Framework(DRF)的读取。

此代码从browsercompat中拆分出来。您可能对查看browsercompat源代码以获得完整的实现示例感兴趣。

它是如何工作的

在正常的DRF视图中,使用Django查询集来加载一个对象或对象列表。序列化器用于将对象转换为“原生”表示,然后渲染器在这个原生表示上工作。如果序列化器包含相关模型的数据,则可能需要多个数据库查询来生成原生表示。使用可以获得一些数据库效率,但至少需要一个查询,这对于具有大量读取操作的API来说是不幸的。

此项目将Django查询集替换为一个缓存感知代理类,使其能够以零数据库请求(检索实例)或一个请求(获取列表视图的主键)来服务读取请求。它适用于具有大量读取操作和许多相关实例之间链接的API。

使用缓存时,Django对象会被序列化为JSON格式。缓存中只存储用于DRF原生表示的属性。这包括外键、反向关系、日期和时间等字段的JSON表示。这些序列化对象按主键存储在缓存中。当在缓存中找到实例时,渲染DRF表示不需要进行数据库读取。如果实例不在缓存中,则将其序列化和存储,以便未来的读取更快。

API实现者编写处理JSON序列化、从数据库加载以及识别变更时的无效缓存条目的方法。有几个集成点,包括用于从缓存加载数据的视图混入。只需对现有代码进行少量更改,您的读取视图就可以变得更快。

项目状态

此代码用于2015 - 2016年开发的browsercompat项目,但截至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的DurationField(creynold)

  • 将日期时间、日期和时间差的字符串表示转换为其他格式

  • 将测试扩展到Django 1.9 beta 1和Django REST Framework 3.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)

  • 将get_object_or_404移动到混入方法,以允许更方便的扩展。

0.3.0 (2015-04-09)

  • 与Django 1.8进行测试

  • 与Django REST Framework 2.4、3.0和3.1进行测试

  • CachedModel现在支持.as属性作为别名,通常指向.id字段。DRF 3使用.as确定模型是否已保存到数据库,对于未保存的字段返回空关系数据。

  • cache.delete_all_versions()将删除模型和PK的所有缓存实例。这在更改发生在正常请求之外时很有用,例如在数据迁移期间。

0.2.0 (2014-12-11)

  • 向cache.update_instance添加update_only选项,以支持冷缓存的最终一致性。

0.1.0 (2014-11-06)

  • 首次发布在PyPI。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

drf-cached-instances-0.3.4.tar.gz (40.9 kB 查看哈希值)

上传时间

构建分布

drf_cached_instances-0.3.4-py2.py3-none-any.whl (13.1 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下提供支持