<p><strong>泛型</strong>或<strong>模型视图集</strong>之间的区别在于:</p>
<ol>
<li><p>方便<br/>
通常,ModelViewSet更方便。因为ModelViewSet支持使用DRF路由器自动创建url模式。但是不要用泛型,你自己做。</p></li>
<li><p>短而脆的代码<br/>
如果要创建CRUD,<strong>泛型需要两个类(listcreateapieview和RetrieveUpdateDestroyAPIView)。但ModelViewSet只需要一个类(ModelViewSet)。</p></li>
</ol>
<p>查看下面的声明。两者都继承自<em>GenericAPIView</em>和<em>mixins.CreateModelMixin</em>,<em>mixins.ListModelMixin</em>它基本上提供了等效的功能。这取决于你喜欢什么。但在大多数情况下我通常使用ViewSet。</p>
<hr/>
<p><strong>声明</strong></p>
<pre><code># Generics __________________________________
class ListCreateAPIView(mixins.ListModelMixin,
mixins.CreateModelMixin,
GenericAPIView):
# ModelViewSet _____________________________
class ModelViewSet(mixins.CreateModelMixin,
mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
mixins.ListModelMixin,
GenericViewSet):
# GenericViewSet _____________________________
class GenericViewSet(ViewSetMixin, generics.GenericAPIView):
</code></pre>
<p><strong>示例代码</strong></p>
<pre><code># Generics __________________________________
from rest_framework import generics
class BookList(generics.ListCreateAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer
# ModelViewSet _____________________________
from rest_framework import viewsets
class BookViewSet(viewsets.ModelViewSet):
queryset = Book.objects.all()
serializer_class = BookSerializer
</code></pre>