序列化器中的 URL 字段 - Django REST Framework

2024 年 8 月 29 日 | 阅读 3 分钟

在使用 Django Rest Framework 构建 API 时,序列化器在定义如何序列化和反序列化数据方面起着至关重要的作用。 序列化器的关键特性之一是定义 URL 字段的能力,这使我们能够链接到相关的对象和资源。

在本文中,我们将更详细地探讨序列化器中 URL 字段的概念,包括它们是什么、如何使用它们以及在使用它们时应遵循的一些最佳实践。

什么是 URL 字段?

序列化器中的 URL 字段允许我们使用 URL 表示相关的对象和资源。 换句话说,它们提供了一种从当前资源链接到相关资源的方法。

例如,假设我们有两个模型,Book 和 Author。 每本书都与一位作者相关联,我们希望在书籍的序列化数据中包含指向作者的链接。 我们可以使用 book 序列化器中的 URL 字段来实现这一点,如下所示:

在此示例中,作者字段被定义为 HyperlinkedRelatedField,它创建指向相关作者资源的超链接。 view_name 参数指定应用于生成 URL 的视图的名称,read_only 参数告诉 Django Rest Framework 此字段应为只读,并且不应在将序列化器用于反序列化时包含它。

使用 URL 字段

在序列化器中定义 URL 字段时,我们可以使用一些不同的选项来自定义其行为。 让我们仔细看看一些最常见的选项

HyperlinkedRelatedField

HyperlinkedRelatedField 类是 Django Rest Framework 中最常用的 URL 字段。 它创建指向相关资源的超链接,并且可以与任何具有相应 URL 端点的模型一起使用。

以下是如何使用 HyperlinkedRelatedField 链接到相关作者资源的示例

在此示例中,我们链接到 author-detail 视图,该视图有望在给定作者 ID 作为 URL 参数时返回单个作者资源。

HyperlinkedIdentityField

HyperlinkedIdentityField 类允许我们创建指向当前资源的超链接。 当我们想要在其自身的表示形式中提供指向当前资源的链接时,这非常有用。

以下是如何使用 HyperlinkedIdentityField 创建指向当前书籍资源的链接的示例

在此示例中,url 字段被定义为 HyperlinkedIdentityField,它使用 book-detail 视图创建指向当前书籍资源的超链接。

URLField

URLField 类可用于直接表示 URL 字段,而无需链接到相关资源。

当我们需要在序列化数据中包含与任何特定模型实例都不对应的 URL 时,这非常有用。

以下是如何使用 URLField 包含指向外部资源的链接的示例

在此示例中,url 字段被定义为 URLField,这使我们能够包含指向外部资源的 URL。

自定义 URL 字段

除了上面讨论的选项之外,还有一些其他方法来自定义序列化器中的 URL 字段。 一些常见的选项包括

  • view_name:指定应用于为相关资源生成 URL 的视图的名称。 这对于 HyperlinkedRelatedField 和 HyperlinkedIdentityField 是必需的。
  • lookup_field:指定应用于为相关资源生成 URL 的相关模型上的字段的名称。 默认情况下,这设置为 pk。
  • lookup_url_kwarg:指定应用于查找相关资源的 URL 参数的名称。 默认情况下,这设置为 lookup_field 的值。
  • format:指定应用于为相关资源生成 URL 的格式字符串。 默认情况下,这设置为 None,这意味着将根据请求自动确定格式。

下一主题#