giv*_*Job 3 django django-rest-framework
根据django rest框架3.7,(viewsets.ViewSet)它将为一组标准的create / retrieve / update / destroy样式操作提供路线
和
(viewsets.ModelViewSet) 还将为一组标准的创建/检索/更新/销毁样式操作提供路线
那么什么时候使用这两个类,这两个之间有什么区别。和get_objects()方法可以在(viewsets.ViewSet)类中重写吗?还是只限于(viewsets.ModelViewSet)类的get_objects()方法?
也许其他人会给出更完整的答案,但这是快速而又肮脏的。ModelViewset是一个Viewset,非常易于针对数据模型上的CRUD操作进行配置。如果您希望为您在models.py中定义的对象公开REST API,则最快的公开方法是使用ModelViewSet。关于应用程序,视图集更加开放。您可以使用Viewset构建模型CRUD端点,但是也可以构建完全不与模型绑定的端点。使用ViewSet具有很大的灵活性,但是ModelViewset的约束更多,但是需要较少的配置即可完成大多数基于模型的任务。
我需要添加更多细节。我正在使用文档代码进一步解释
视图集.ViewSet
class ViewSet(ViewSetMixin, views.APIView):
"""
The base ViewSet class does not provide any actions by default.
"""
pass
Run Code Online (Sandbox Code Playgroud)这意味着ViewSet继承了两个类ViewSetMixin(它只将“GET”和“POST”方法绑定到“list”和“create”操作)和views.APIView(这给出了authentication_classes、permission_classes等...属性)。soviewsets.ViewSet默认情况下不提供任何具体的操作方法,但您必须手动覆盖列表、创建、更新等方法。
class ModelViewSet(mixins.CreateModelMixin,
mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
mixins.ListModelMixin,
GenericViewSet):
"""
A viewset that provides default create(),retrieve(),update(),
partial_update(), destroy() and list() actions.
"""
pass
Run Code Online (Sandbox Code Playgroud)
这意味着ModelViewSet继承了所有大多数 mixin,因此它提供默认列表、创建、更新等。操作方法和GenericViewSet(它提供get_object和get_queryset方法,您需要设置这些属性,或者覆盖get_queryset()/get_serializer_class()因为GenericViewSet继承自 GenericAPIView,所以modelViewSet 需要在 ModelViewSet 中queryset设置serializer_class属性。
3.我们可以在(viewsets.ViewSet)类中重写get_objects()方法吗?或者 get_objects() 方法仅限于 (viewsets.ModelViewSet) 类?
**get_object** and **get_queryset** belongs to **GenericViewSet(GenericAPIView)** class, in ModelViewSet this GenericViewSet inherited by default so it works only in **ModelViewSet** and **get_object** method no use in ViewSet.
Run Code Online (Sandbox Code Playgroud)
欲了解更多信息,请查看这篇文章,下次您就不会再问问题了