DjangoRestFramework之教程6:视图集和路由器
REST框架包括用于处理ViewSets,这使开发人员能够集中精力对API的状态和交互进行建模,并根据常见约定自动处理URL构造。
ViewSet类几乎与View类,但它们提供的操作如下:read,或update,而不是方法处理程序,例如get或put.
A ViewSet类仅在最后一刻绑定到一组方法处理程序,当它被实例化为一组视图时,通常使用Router类,它处理为您定义URL conf的复杂性。
重构以使用ViewSet
让我们使用当前的视图的集合,并将它们重构为视图集。
首先,让我们重构我们的UserList和UserDetail视图为单个UserViewSet…我们可以移除这两个视图,并将它们替换为一个类:
from rest_framework import viewsets
class UserViewSet(viewsets.ReadOnlyModelViewSet):
"""
This viewset automatically provides `list` and `detail` actions.
"""
queryset = User.objects.all()
serializer_class = UserSerializer
这里我们用了ReadOnlyModelViewSet类自动提供默认的“只读”操作。我们还在设置queryset和serializer_class属性与我们使用常规视图时所用的完全一样,但是我们不再需要向两个单独的类提供相同的信息。
接下来,我们将替换SnippetList, SnippetDetail和SnippetHighlight查看类。我们可以删除这三个视图,并再次用一个类替换它们。
from rest_framework.decorators import action
from rest_framework.response import Response
class SnippetViewSet(viewsets.ModelViewSet):
"""
This viewset automatically provides `list`, `create`, `retrieve`,
`update` and `destroy` actions.
Additionally we also provide an extra `highlight` action.
"""
queryset = Snippet