我在REST API中使用泛型和普通url,但现在我遇到了一个问题:我希望自定义操作、简单的视图可以用我的模型生成一些东西,比如“run”、“publish”等等
ViewSet
给了action
decorator来创建自定义操作,但是只有在视图集中,还有stepial路由器,它使我们能够使用railsish约定而不是配置来简化所有事情。
但是我发现ModelViewSet
给了我们与泛型相同的能力:完整CRUD、序列化器、过滤器、cusstom pre/post和queryset,因此,它引出了一个问题:
如果ModelViewSet
提供相同的能力和更多,为什么会有泛型?有什么区别?
泛型或模型视图集之间的区别在于:
方便
通常,ModelViewSet更方便。因为ModelViewSet支持使用DRF路由器自动创建url模式。但是不要用泛型,你自己做。
短而脆的代码
如果要创建CRUD,泛型需要两个类(listcreateapieview和RetrieveUpdateDestroyAPIView)。但ModelViewSet只需要一个类(ModelViewSet)。
查看下面的声明。两者都继承自GenericAPIView和mixins.CreateModelMixin,mixins.ListModelMixin它基本上提供了等效的功能。这取决于你喜欢什么。但在大多数情况下我通常使用ViewSet。
声明
示例代码
让我先把这个问题再解释清楚一点。。。
为什么有泛型视图,但也有泛型视图集
这实际上就是为什么REST框架同时支持视图和视图集的问题。回答-视图集对于原型设计或当您的API URL整齐地映射到一个固定的约定(例如CRUD样式的API)时非常有用。视图对于显式或url始终不能灵活地映射到固定约定的情况非常有用。
区别在于他们提供了什么样的方法。
例如:
GenericViewSet继承自GenericAPIView,但不提供基本操作的任何实现。只需要得到你想要的东西,得到你想要的。
ModelViewSet继承自GenericAPIView并包含各种操作的实现。换句话说,您不需要实现基本的操作,如列表、检索、创建、更新或销毁。当然,您可以重写它们并实现自己的列表或创建方法。
您可以在“API参考”一节中阅读有关它的更多信息: ModelViewSet
相关问题 更多 >
编程相关推荐