何时使用序列化器的create()和ModelViewset的create()perform_create()

何时使用序列化器的create()和ModelViewset的create()perform_create(),第1张

何时使用序列化器的create()和ModelViewset的create()perform_create()
  1. 你会使用
    create(self, validated_data)
    节约型和“刺”的价值观为就像每个模型前场添加任何额外的细节到对象
    **validated_data
    一样。理想情况下,您只想在一个位置执行这种“探测”形式,因此
    create
    您的方法
    CommentSerializer
    是最佳的选择。最重要的是,您可能还想在将帐户保存到自己的数据库之前,调用外部api在用户端创建用户帐户。您应该将此
    create
    功能与结合使用
    ModelViewSet
    。永远想一想-“薄视图,厚串行器”。

例:

def create(self, validated_data):    email = validated_data.get("email", None)    validated.pop("email")     # Now you have a clean valid email string     # You might want to call an external API or modify another table    # (eg. keep track of number of accounts registered.) or even    # make changes to the email format.    # once you are done, create the instance with the validated data    return models.YourModel.objects.create(email=email, **validated_data)
  1. 中的

    create(self, request, *args, **kwargs)
    函数在的父类中
    ModelViewSet
    定义。的主要功能如下:
    CreateModelMixin``ModelViewSet``CreateModelMixin

    from rest_framework import status

    from rest_framework.response import Response

    def create(self, request, args, *kwargs):
    serializer = self.get_serializer(data=request.data)
    serializer.is_valid(raise_exception=True)
    self.perform_create(serializer)
    headers = self.get_success_headers(serializer.data)
    return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)


    def perform_create(self, serializer):
    serializer.save()

如您所见,以上

create
函数负责在序列化程序上调用验证并产生正确的响应。这样做的好处是,您现在可以隔离应用程序逻辑,而不必担心平凡和重复的验证调用以及处理响应输出:)。与
create(self,validated_data)
序列化器(您的特定应用程序逻辑所在的位置)中的结合使用时,这可以很好地工作。

  1. 现在您可能会问,为什么我们
    perform_create(self, serializer)
    只有一行代码才有一个单独的函数!好吧,这背后的主要原因是在调用
    save
    函数时允许自定义。您可能想要在调用之前提供额外的数据
    save
    (例如
    serializer.save(owner=self.request.user)
    ,如果我们没有
    perform_create(self, serializer)
    ,那么您将不得不重写,
    create(self, request, *args, **kwargs)
    而这违背了让mixin进行繁重而乏味的工作的目的。

希望这可以帮助!



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5647769.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存