Django REST framework 3.4

3.4 发行版是计划系列中的第一个版本,它将处理模式生成、超媒体支持、API 客户端以及最后的实时支持。


资金 (Funding)

3.4 版本是通过我们的协作资助模型在最近的 Mozilla 拨款中实现的。如果您在商业上使用 REST framework,并且希望看到这项工作继续进行,我们强烈鼓励您通过注册付费计划来投资其持续开发。

最初的目标是在 REST framework 上提供一个单一的全职职位。现在,我们已达到实现这一目标的 60% 以上。每一次注册都会产生重大影响。

Django REST framework 3.4 - 图1 Django REST framework 3.4 - 图2 Django REST framework 3.4 - 图3

非常感谢我们所有出色的赞助商,特别是我们的高级赞助商 RoverSentryStream


模式和客户端库 (Schemas & client libraries)

REST framework 3.4 为生成 API 模式提供了内置支持。

我们通过使用 Core API (用于描述 API 的文档对象模型) 来提供此支持。

由于 Core API 以独立于格式的方式表示 API 模式,因此通过允许渲染器类确定内部表示如何映射到外部模式格式,我们能够将 Core API Document 对象渲染为许多不同的模式格式。

通过将 Document 对象渲染为 HTML 文档页面,此方法还将为将来的一系列自动生成的 API 文档选项打开大门。

除了内置模式支持外,我们现在还提供了以下功能:

这些 API 客户端是动态驱动的,并且能够与任何公开支持的模式格式的 API 交互。

动态驱动客户端允许您在应用层接口而不是网络层接口上与 API 交互,同时还提供了 RESTful Web API 设计的好处。

我们期望在未来几个月内扩大我们提供客户库的语言范围。

还计划进一步完善 API 模式支持,包括支持文件上传和下载的文档,以及对文档生成和参数注释的改进支持。


当前对模式格式的支持如下:

名称 支持 PyPI 包
Core JSON 模式生成和客户端支持。 coreapi 内置支持。
Swagger / OpenAPI 模式生成和客户端支持。 openapi-codec 包。
JSON Hyper-Schema 目前仅支持客户端。 hyperschema-codec 包。
API Blueprint 尚不可用。 尚不可用。

你可以阅读更多关于任何的新功能如下:

同样值得注意的是,Marc Gibbons 目前正在为流行的 Django REST Swagger 包的 2.0 版本努力,它将与我们新的内置支持相结合。


支持的版本 (Supported versions)

3.4.0 版本增加了对 Django 1.10 的支持。

现在支持以下版本的 Python 和 Django:

  • Django 版本 1.8,1.9 和 1.10。
  • Python 版本 2.7,3.2 (*),3.3 (*),3.4,3.5。

(*) 请注意,Django 1.9 以后不支持 Python 3.2 和 3.3。


弃用和变化 (Deprecations and changes)

3.4 版本包括非常有限的弃用或行为更改,并应提供简单的升级。

在序列化器类上使用字段或排除 (Use fields or exclude on serializer classes.)

3.3.0 中的以下更改现在已从 “等待弃用” 升级为 “已弃用”。它的使用将继续发挥作用,但会引起警告:

ModelSerializerHyperlinkedModelSerializer 应包含 fields 选项或 exclude 选项。fields = '__ all__' 快捷方式可用于显式包含所有字段。

返回时间或日期时间时的微秒精度 (Microsecond precision when returning time or datetime.)

使用默认的 JSON 渲染器并直接返回 datetimetime 实例,现在将以微秒精度 (6 位数) 呈现,而不是毫秒精度 (3 位数)。这使得输出格式与 serializers.DateTimeFieldserializers.TimeField 的默认字符串输出一致。

此更改不会影响使用序列化器时的默认行为,而是将 datetimetime 实例以微秒精度序列化为字符串。

如果需要,可以使用 DATETIME_FORMATTIME_FORMAT 设置修改序列化器行为。

可以通过在 JSONRenderer 子类上设置自定义 encoder_class 属性来修改渲染器行为。

关系选项不再显示在 OPTIONS 请求中 (Relational choices no longer displayed in OPTIONS requests.)

向具有序列化器选择字段的视图发出 OPTIONS 请求将导致响应中返回可用选项列表。

在存在关系字段的情况下,先前的行为是返回可用实例的列表以供该关系字段选择。

为了尽量减少暴露的信息,现在的行为是不返回关系字段的选择信息。

如果要覆盖此新行为,则需要实现自定义元数据类

有关此行为更改的详细信息,请参阅问题 #3751

其他改进 (Other improvements)

此版本包括来自大量拉取请求和问题的进一步工作。

非常感谢所有参与发布的贡献者,无论是通过提出问题、提供反馈、改进文档、建议和实现代码更改。

完整的逐项发布说明可以在这里找到