从APIView和Model ViewSet使用或继承有什么区别

时间:2017-01-26 16:40:17

标签: django django-views django-rest-framework

我会在使用API​​View和使用ModelViewSet时遇到差异,当我想要序列化我的模型时,获取他们的对象/记录列表?

例如,在APIView documentation中,我们使用ListUser类及其get方法,我们可以获取用户列表

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', )

我使用这种方式使用ModelViewSet获得了相同的用户列表:

NancyModule

如何确定何时使用API​​View或ModelViewSet执行此任务?

1 个答案:

答案 0 :(得分:1)

问题太开放了,虽然我会尝试回答它。

首先,APIViewViewSetModelViewSetGenericAPIViewListAPIView(和co)相关联。

* 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