3.8 Announcement
Django REST framework 3.8
3.8 版本是一个以维护为重点的版本,它解决了大量以前悬而未决的问题,并为未来的变化奠定了基础。
资金 (Funding)
如果您在商业上使用 REST framework,并且希望看到这项工作继续进行,我们强烈鼓励您通过注册付费计划来投资其持续开发。
我们要特别感谢我们的高级支持者,Rover,Sentry,Stream,Machinalis 和 Rollbar。
突破性变化 (Breaking Changes)
在 Field 上改变 read_only
和 default
的行为 (Altered the behaviour of read_only
plus default
on Field.)
#5886 read_only
字段现在总是被排除在可写字段之外。
以前的 read_only
字段在与 default
值组合时将使用 default
来创建和更新操作。这在某些情况下是违反直觉的,并导致难以支持可空关系上的点状 source
属性。
为了维护旧的行为,您可能需要在视图中调用 save()
时传递 read_only
字段的值:
def perform_create(self, serializer): serializer.save(owner=self.request.user)
或者,您可以根据需要在序列化器上重写 save()
或 create()
或 update()
。
弃用 (Deprecations)
action
装饰器替换 list_route
和 detail_route
(action
decorator replaces list_route
and detail_route
)
#5705 list_route
和 detail_route
已合并为单个 action
装饰器。这改进了视图集操作内省,并允许在未来版本中的可浏览 API 中显示额外的操作。
list_route
和 detail_route
现在都在等待弃用。它们将在 3.9 中被弃用,并在 3.10 中被完全删除。
新的 action
装饰器采用布尔 detail
参数。
- 使用
@action(detail=True)
替换detail_route
。 - 使用
@action(detail=False)
替换list_route
。
exclude_from_schema
@api_view
装饰器的 APIView.exclude_from_schema
和 exclude_from_schema
参数现在被弃用了。它们将在 3.9 中完全删除。
对于 APIView
,您应该在视图类上设置 schema = None
属性。
对于基于函数的视图,可以使用 @schema
装饰器将视图从模式中排除,方法是使用 @schema(None)
。
小修正和改进 (Minor fixes and improvements)
此版本中有大量小修正和改进。有关完整列表,请参阅发行说明页面。
What's next
我们目前正致力于将 OpenAPI 作为默认模式输出。我们还将重新访问 API 文档生成和客户端库。
我们正在进行一些整合以实现这一目标。计划 3.9 将删除 coreapi
和 coreschema
库,而是将 apistar
用于 API 文档生成、模式生成和 API 客户端库。