Sco*_*ord 4 django python-2.7 django-rest-framework
我正在学习Django REST Framework(http://tomchristie.github.io/rest-framework-2-docs/,我们仍然在2.4版本上).定义这样的类是否正确,例如:
class UserView(generics.RetrieveUpdateDestroyAPIView,
generics.ListCreateAPIView,
viewsets.GenericViewSet):
# ... rest of class
Run Code Online (Sandbox Code Playgroud)
换句话说,将*ViewSet和*APIView mixins /类一起使用是正确的还是可能的,或者它们是否是两个完全独立的概念,不能合并?
我不认为将两者结合使用是可取的.它们是为不同目的而建造的.
按照文档,
ListCreateAPIView:
用于读写端点以表示模型实例的集合.
提供get和post方法处理程序.
扩展:GenericAPIView,ListModelMixin,CreateModelMixin
RetrieveUpdateDestroyAPIView:
提供get,put,patch和delete方法处理程序.
扩展:GenericAPIView,RetrieveModelMixin,UpdateModelMixin,DestroyModelMixin
GenericViewSet:
GenericViewSet类继承自GenericAPIView,并提供默认的get_object,get_queryset方法和其他通用视图基本行为集,但默认情况下不包含任何操作.
ModelViewSet:
ModelViewSet类继承自GenericAPIView,并通过混合各种mixin类的行为来包含各种操作的实现.
ModelViewSet类提供的操作是.list(),. retrieve(),. create(),. update()和.destroy().
有了ModelViewSet可以实现所有CRUD操作,你打算与你上面的代码片断使用.
如果您想要自定义功能(即不是所有方法处理程序),则可以使用通用视图.但是,如果你想要所有方法处理程序,那么视图集就可以解决问题.您甚至可以浏览其余的框架代码,看看在通用API视图中继承的mixins是Viewsets中继承的mixin的子集.Viewsets基本上将这些视图捆绑在一起.
您可以执行以下操作并首先实现您打算执行的操作:
class UserView(viewsets.ModelViewSet):
.....
Run Code Online (Sandbox Code Playgroud)
在所有版本的Django REST框架中,通用API视图和ViewSet类明显是分开的,但mixin可以在它们之间共享.这是因为视图集实际上首先从泛型类继承.
如前所述,您可以使用通用mixins,但是如果您只想使用一些受支持的方法构建视图集,或者您想要自己覆盖其中一个方法.
class UserView(mixins.CreateModelMixin, mixins.ListModelMixin,
mixins.RetrieveModelMixin, mixins.DestroyModelMixin,
mixins.UpdateModelMixin,
viewsets.GenericViewSet):
Run Code Online (Sandbox Code Playgroud)
不要忘了,Django的REST框架并提供了一个ModelViewSet与ReadOnlyModelViewSet您可以使用,以及基类.
| 归档时间: |
|
| 查看次数: |
2242 次 |
| 最近记录: |