Django REST framework 3.7

3.7 版本侧重于对模式生成和交互式 API 文档的改进。

这个版本已经由赞助该版本的 Bayer 推出。

Django REST framework 3.7 - 图1

资金 (Funding)

如果您在商业上使用 REST framework,并且希望看到这项工作继续进行,我们强烈鼓励您通过注册付费计划来投资其持续开发。

Django REST framework 3.7 - 图2 Django REST framework 3.7 - 图3 Django REST framework 3.7 - 图4 Django REST framework 3.7 - 图5

Django REST framework 3.7 - 图6

除了我们的发行赞助商,我们还要特别感谢我们的高级支持者,RoverSentryStreamMachinalisRollbar


自定义 API 文档和模式生成 (Customizing API docs & schema generation.)

3.5 中引入的模式生成和 3.6 中相关的 API 文档生成都是非常强大的特性,但是在视图内省无法正确识别特定视图的模式的情况下,它们受到了一定的限制。

为了解决这个问题,我们现在增加了 API 模式的每个视图自定义的能力。我们为此添加的接口允许对视图中应该包含哪些字段进行基本的手动重写,也允许对模式生成进行更复杂的编程重写。我们相信此版本全面地解决了模式特性的一些现有缺点。

让我们快速了解一下使用新功能…

APIView 类具有 schema 属性,用于控制如何生成该特定视图的 Schema。默认行为是使用 AutoSchema 类。

  1. from rest_framework.views import APIView
  2. from rest_framework.schemas import AutoSchema
  3. class CustomView(APIView):
  4. schema = AutoSchema() # 仅供演示。这是默认行为。

我们可以从 API 模式和文档中删除视图,如下所示:

  1. class CustomView(APIView):
  2. schema = None

如果我们想主要使用默认行为,但另外在特定视图中包含一些其他字段,我们现在可以轻松地这样做…

  1. class CustomView(APIView):
  2. schema = AutoSchema(manual_fields=[
  3. coreapi.Field('search', location='query')
  4. ])

要忽略特定视图的自动生成,而是显式地指定模式,我们使用 ManualSchema 类代替…

  1. class CustomView(APIView):
  2. schema = ManualSchema(fields=[...])

对于更高级的行为,您可以将 AutoSchema 子类化以提供自定义模式生成,并将其应用于特定视图。

  1. class CustomView(APIView):
  2. schema = CustomizedSchemaGeneration()

有关新功能的完整详细信息,请参阅 Schema 文档


Django 2.0 支持 (Django 2.0 support)

REST framework 3.7 支持 Django 版本 1.10,1.11 和 2.0 alpha。


小修正和改进 (Minor fixes and improvements)

此版本中有大量小修复和改进。有关完整列表,请参阅发行说明页面。

目前该项目的公开票数量处于相当一段时间以来的最低水平,我们将继续关注将其减少到可管理的数量。


弃用 (Deprecations)

exclude_from_schema

@api_view 装饰器的 APIView.exclude_from_schemaexclude_from_schema 参数,现在是 PendingDeprecation。它们将在 3.8 版本中移至弃用,并在 3.9 中完全删除。

对于 APIView,您应该在视图类上设置 schema = None 属性。

对于基于函数的视图,可以使用 @schema 装饰器将视图从模式中排除,方法是使用 @schema(None)

DjangoFilterBackend

DjangoFilterBackend 在 3.5 中被移至等待弃用,并在 3.6 中弃用。它现在已从核心框架中删除。

该功能仍然完全可用,但是在 django-filter 包中提供。


What’s next

我们仍计划通过提供与Django通道集成的文档来改进对REST框架的实时支持,以及添加对更轻松地向现有 HTTP 端点添加 WebSocket 支持的支持。

这很可能是定时的,以便这里的任何 REST framework 开发都与 API Star 上的类似工作相关联。