【问题标题】:What is the difference between mixins and generics?mixins 和泛型有什么区别?
【发布时间】:2019-08-29 01:52:11
【问题描述】:

我正在学习 Django Rest 框架。并且有两个概念在我看来几乎是相同的,而且它们用于不同的场景。

rest_framework mixins 我认为当我们使用视图集时会用到它们。 并且rest_framework generics 与 APIViews 一起使用。

这两个组件有什么区别?

【问题讨论】:

标签: django django-rest-framework mixins django-generic-views


【解决方案1】:

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

Django Rest Framework (DRF) 将 ReSTful API / HTTP 动词行为与 Django 模型操作分开,并为每个操作组织一组抽象/基类。 ReSTful 功能位于APIViewGenericAPIViewViewSetMixin。 Model相关的操作在mixin模块中实现。

DRF 然后利用 Python 的多重继承和“mixin”模式,将它们组合成更高级别的类,这些类既可用又可扩展。

除了通过mixin 类组合功能之外,通用视图和具体ModelViewSet 都继承自APIView


虽然与问题无关,但以下关于 ViewSets 的观察可能会有所帮助...

以下是 DRF 网站上的 ViewSet 简介,它可能会使事情看起来比实际更复杂...

ViewSet 类只是一种基于类的 View,它不提供任何方法处理程序,例如 .get() 或 .post(),而是提供诸如 .list 之类的操作() 和 .create()。

ViewSet 的方法处理程序仅在最终确定视图时绑定到相应的操作,使用 .as_view() 方法。

在许多情况下,与其直接继承ViewSet,不如继承ModelViewSet 并将其与DefaultRouter 结合起来更有意义。 ModelViewSet 通过各种mixin 类获取方法处理程序,DefaultRouter 提供'action' 函数映射。

结合起来,所有基本的 REST 操作都可以在给定的模型上执行,只需要很少的代码。

【讨论】:

    猜你喜欢
    • 2018-07-08
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    • 2010-10-15
    • 2023-03-17
    相关资源
    最近更新 更多