gpt4 book ai didi

django - 为什么 Serializer 方法和 View 方法有区别?

转载 作者:行者123 更新时间:2023-12-05 01:11:22 29 4
gpt4 key购买 nike

在 Django DRF 中,我可以将以下方法添加到序列化程序中:

    def create(self, validated_data):
user = User(
email=validated_data['email'],
username=validated_data['username']
)
user.set_password(validated_data['password'])
user.save()
return user

在发现这一点之前,我认为您通常在 View 中通过覆盖 View/ViewSet 方法来执行此操作。

我原以为序列化程序所做的只是转换数据并将其发送出去或从外部调用中接收。

有人可以向我解释在 View 上执行此操作与在序列化程序上执行此操作之间的区别吗?

更广泛地说,在序列化程序而不是其他地方调用方法有什么好处?

最佳答案

序列化程序的工作是获取一个数据 block 并将其转换为另一个数据 block 。最典型的是它从模型转换为某种形式的字典,反之亦然。通常每个模型至少有一个序列化器,但对于不同的用例,您可能有任意数量的序列化器。例如,您可能会以不同的形式获取数据,例如来自注册表单和 API 调用,并且您希望将两者转换为有效的 User 实例。因此,您可以为这两种不同的场景定义两个不同的序列化程序,它们最终都以相同的 User 实例结束。您可能需要自定义这些序列化程序的某些方面以适应这种情况。

另一方面, View 接受 HTTP 请求,做一些事情,然后决定返回什么响应。 做某事 可能涉及使用序列化程序,但并非必须如此。 View 的最大工作是决定在成功或失败时要做什么,例如呈现不同的响应或重定向到不同的 URL。

您需要确定某些逻辑片段的可重用性。将序列化程序视为将一种类型的数据转换为另一种类型的数据;称之为将 type A 转换为 type B ,反之亦然。这里的“类型”就是您的输入/输出数据的样子。然后考虑在您的应用程序中您会遇到类型 A 的数据 block ,以及您是否需要多次将其转换为类型 B。如果是这样,您可能希望为它制作一个特定的序列化器,而不是在两个或多个 View 中重复相同的逻辑。

关于django - 为什么 Serializer 方法和 View 方法有区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63394431/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com