bga*_*ial 8 django django-views django-rest-framework
当我想序列化我的模型以获得它们的对象/记录列表时,我会遇到关于何时使用 APIView 和何时使用 ModelViewSet 的差异?
例如,在APIView 文档中,我们使用 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)
Run Code Online (Sandbox Code Playgroud)
我已经通过这种方式使用 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', )
Run Code Online (Sandbox Code Playgroud)
我如何才能确定何时应该为此任务使用 APIView 或 ModelViewSet?
Lin*_*via 18
问题太开放了,尽管我会尽力回答。
首先,APIView或者ViewSet不绑定到模型,而ModelViewSet, GenericAPIView, ListAPIView(和 co) 是。
*View 和 *ViewSet 之间的主要区别在于 *ViewSet 旨在与路由器一起使用并提供单个类来公开资源,而 *View 将需要两个(一个用于列表/创建,另一个用于详细信息/更新/删除)。
请注意,这APIView是最低级别,仅与 HTTP 动词(get/post/put...)相关联,同时ViewSet或GenericAPIView将具有 CRUD,例如 list/update...
为了公开 Django 的模型,您需要
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
Run Code Online (Sandbox Code Playgroud)
或者
class UserListCreateView(ListCreateAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
class UserRetrieveUpdateDestroyView(RetrieveUpdateDestroyAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4466 次 |
| 最近记录: |