gpt4 book ai didi

django - Viewsets `create()`和 `update()`与序列化器 `create()`和 `update()`有什么区别?

转载 作者:行者123 更新时间:2023-12-04 23:39:23 25 4
gpt4 key购买 nike

在这里:http://www.django-rest-framework.org/api-guide/viewsets/#modelviewset表示“ModelViewSet类提供的 Action 是.list()、. retrieve()、. create()、. update()、. partial_update()和.destroy()。”

在这里:http://www.django-rest-framework.org/api-guide/serializers/#modelserializer表示“ModelSerializer类与常规Serializer类相同,除了:它包括.create()和.update()的简单默认实现。”

1)假设有一个Viewset UserViewSet以及路由器user和序列化器UserSerializer。如果我将POST发送到/user/,它称为UserViewSetcreate()还是UserSerializercreate()

2)假设UserViewSet具有此权限:

class NoCreate(permissions.BasePermission):
"""
No one can create this object.
"""
message = 'You do not have permission to complete the action you are trying to perform.'

def has_permission(self, request, view):
if view.action == "create":
return False
return True

如果我将 UserSerializer发送到 create(),是否仍会调用 POST/user/

最佳答案

1) Assuming there is a Viewset UserViewSet and router user and serializer UserSerializer. If I sent a POST to /user/ does it call the UserViewSet's create() or the UserSerializer's create()?



两者都会被调用。 View 的创建将获取序列化器,确保所提供的数据有效,调用序列化器的保存并生成响应。序列化程序的创建实际上将执行实例创建-即将其写入数据库。

Does the UserSerializer's create() still get called if I send a POST to /user/?



如果将权限设置为 View 集,则为No。但是,如果要阻止任何创建,则应微调 ModelViewSet:
class UserViewSet(mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
mixins.ListModelMixin,
GenericViewSet):

将包含除创建之外的所有 Action 。

关于django - Viewsets `create()`和 `update()`与序列化器 `create()`和 `update()`有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42615984/

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