Django rest框架,mixin和泛型有什么区别?

时间:2019-04-07 23:22:11

标签: django django-rest-framework

我正在学习Django rest框架。从我的角度来看,有两个概念几乎相同,它们用于不同的场景。

rest_framework mixins我认为在使用视图集时会使用它们。 rest_framework generics和APIViews一起使用。

如果有人能向我解释这两个组件之间的区别,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

genericsmixin模块确实是不同的,但是它们是相互关联的。

DRF将ReSTful API / HTTP动词行为与Django模型操作分开,并为每个操作组织了一组抽象/基类。 ReSTful功能位于APIViewGenericAPIViewViewSetMixin中。与模型相关的操作在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操作都可以在给定的模型上执行,而只需很少的代码。