gpt4 book ai didi

django - APIView和Model ViewSet在使用或继承上有什么区别

转载 作者:行者123 更新时间:2023-12-03 17:58:52 27 4
gpt4 key购买 nike

当我想序列化我的模型以获取它们的对象/记录列表时,我会遇到关于何时使用 APIView 和何时使用 ModelViewSet 的区别?

例如,在 APIView documentation我们有 ListUser 类和他们的 get 方法,我们可以得到用户列表

class ListUsers(APIView):
"""
View to list all users in the system.

* Requires token authentication.
* Only admin users are able to access this view.
"""
authentication_classes = (authentication.TokenAuthentication,)
permission_classes = (permissions.IsAdminUser,)

def get(self, request, format=None):
"""
Return a list of all users.
"""
usernames = [user.username for user in User.objects.all()]
return Response(usernames)

我已经通过这种方式使用 ModelViewSet 获得了相同的用户列表:
class UserViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows users to be viewed or edited.
"""
queryset = User.objects.all().order_by('-date_joined')
serializer_class = UserSerializer
filter_fields = ('username', 'is_player', 'first_name', 'last_name', 'team' , 'email', )

如何确定何时应使用 APIView 或 ModelViewSet 执行此任务?

最佳答案

问题太开放了,尽管我会尝试回答。

第一件事,APIViewViewSet与模型无关,而 ModelViewSet , GenericAPIView , ListAPIView (和合作)是。

*View 和 *ViewSet 之间的主要区别在于 *ViewSet 旨在与路由器一起使用并提供一个类来公开资源,而 *View 需要两个(一个用于列表/创建,另一个用于详细信息/更新/删除)。

请注意 APIView是最低级别,仅与 HTTP 动词 (get/post/put...) 相关,而 ViewSetGenericAPIView将有 CRUD,例如列表/更新...

为了公开 Django 的模型,您需要

class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer

或者
class UserListCreateView(ListCreateAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer

class UserRetrieveUpdateDestroyView(RetrieveUpdateDestroyAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer

关于django - APIView和Model ViewSet在使用或继承上有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41878524/

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