use*_*875 9 django serialization django-rest-framework django-rest-viewsets
在这里:http : //www.django-rest-framework.org/api-guide/viewsets/#modelviewset它说“ModelViewSet 类提供的操作是 .list()、.retrieve()、.create() 、.update()、.partial_update() 和 .destroy()。”
在这里:http : //www.django-rest-framework.org/api-guide/serializers/#modelserializer它说“ModelSerializer 类与常规 Serializer 类相同,除了:它包括 . create() 和 .update()。”
1)假设有一个 ViewsetUserViewSet和 routeruser和 serializer UserSerializer。如果我发送了一个POSTto/user/它叫UserViewSet'screate()还是UserSerializer's create()?
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
Run Code Online (Sandbox Code Playgroud)
请问UserSerializer的create()还是被调用,如果我发POST来/user/?
1) 假设有一个Viewset UserViewSet 和router user 和serializer UserSerializer。如果我将 POST 发送到 /user/ 它会调用 UserViewSet 的 create() 还是 UserSerializer 的 create()?
两者都会被调用。视图的创建将获取序列化程序,确保提供的数据有效,调用序列化程序的保存并生成响应。序列化程序的 create 将实际执行实例创建 - 即将其写入数据库。
如果我向 /user/ 发送 POST,UserSerializer 的 create() 是否仍然被调用?
如果权限设置为视图集,则否。但是,如果您想阻止任何创建,您应该微调您的ModelViewSet:
class UserViewSet(mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
mixins.ListModelMixin,
GenericViewSet):
Run Code Online (Sandbox Code Playgroud)
将包含除创建之外的所有操作。
ViewSet 中的.create()和.update()方法是在发出请求时执行的操作。带有POST方法的请求调用ViewSet 的.create()方法,因为带有PUT方法的请求或PATCH调用ViewSet 的.update()方法。
Serializer的.create()和.update()方法是通过调用.save()Serializer的方法来执行的。
调用.save()将创建新实例或更新现有实例,具体取决于实例化序列化程序类时是否传递了现有实例:
# .save() will create a new instance.
serializer = CommentSerializer(data=data)
# .save() will update the existing `comment` instance.
serializer = CommentSerializer(comment, data=data)
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参阅保存实例文档。
| 归档时间: |
|
| 查看次数: |
2753 次 |
| 最近记录: |