我正在学习Django rest框架。从我的角度来看,有两个概念几乎相同,它们用于不同的场景。
rest_framework mixins
我认为在使用视图集时会使用它们。
rest_framework generics
和APIViews一起使用。
如果有人能向我解释这两个组件之间的区别,我将不胜感激。
答案 0 :(得分:1)
generics
和mixin
模块确实是不同的,但是它们是相互关联的。
DRF将ReSTful API / HTTP动词行为与Django模型操作分开,并为每个操作组织了一组抽象/基类。 ReSTful功能位于APIView
,GenericAPIView
和ViewSetMixin
中。与模型相关的操作在mixin
模块中实现。
然后,DRF利用Python的多重继承和“ mixin”模式将它们组合在一起,成为可以使用和扩展的高级类。
除了通过ModelViewSet
类编写功能之外,通用视图和具体APIView
都继承自mixin
。
尽管与问题无关,但以下有关ViewSet的观察可能会有所帮助...
DRF网站上的ViewSets简介中的以下内容可能会使事情看起来比实际要复杂得多...
ViewSet类只是基于类的视图的一种,它不提供任何方法处理程序,例如.get()或.post(),而是提供诸如.list的操作()和.create()。
使用.as_view()方法,仅在最终确定视图时将ViewSet的方法处理程序绑定到相应的动作。
在许多情况下,继承ViewSet
并将其与ModelViewSet
结合起来比直接继承DefaultRouter
更有意义。 ModelViewSet
通过各种mixin
类获得方法处理程序,而DefaultRouter
提供了“动作”功能映射。
结合起来,所有的基本REST操作都可以在给定的模型上执行,而只需很少的代码。