1

我最近有一个 django 问题——其中一个答案让我很困惑:

https://stackoverflow.com/a/10608687/1061426

我已经阅读了 django doco,但无法完全弄清楚 mixins 与所询问的内容或答案所指的内容之间的关系。

所以,我搜索了“django mixin tutorial”,偶然发现了一个叫做 dajax 和 dajaxice 的东西。好吧,我在撒谎,我偶然发现了这个博客:

http://www.pythondiary.com/blog/Apr.15,2012/stay-tuned-django-ajax-tutorial.html

我的问题是:什么是mixin?它们与 ajax 调用有何关系?它们是否用于 ajax 以外的东西?为什么我要使用 dajax 或 dajaxice 或其他一些 django 插件框架,而不仅仅是普通的 django 来使用 ajax?

此外,没有 dajax 标签,但有一个用于 stackoverflow 的 dajaxice 标签......这是否意味着 dajaxice 是要走的路?

干杯,

4

2 回答 2

4

Mixins 是一个通用的面向对象编程概念。它们与 Django 或 Dajax 等没有特别的关系。但是,Django 确实,而且 Dajax 也可能使用 mixins。

一般来说,“mixin”只是一个类,意在与另一个类混合。它通常不会自己做任何事情,而只是将功能添加到另一个类。Django 的“抽象”模型概念就是 mixin 的一个例子。你永远不会实例化一个抽象模型。相反,其他模型从抽象模型继承,获得了它的所有功能,并且实际上是那些子类被实例化。

Django 的基于类的视图(这就是将您带到这里的答案正在谈论的内容)也使用 mixins。例如,大多数基于类的视图都继承自TemplateResponseMixin. 这个类本身不是一个视图,除了基于类的视图继承之外,你永远不会将它用于任何事情。它只是将模板呈现为响应的所有功能的封装,因此可以在不违反 DRY(不要重复自己)的情况下将其功能“混合”到所有各种视图中。

于 2012-05-17T20:26:21.147 回答
2

不,mixin 与 Ajax 没有任何特别的关系。

mixin 只是一个类,可以用作另一个类的多重继承的一部分。Django 在其基于类的视图中广泛使用这些 - 一些类提供(例如)显示表单或模型列表的基本功能,并且您应该将它们与您自己的类混合:创建您自己的代码来实现您的拥有对该功能的扩展,同时从一个或多个 mixin 继承。

我从未使用过 Dajax,但我想它也使用 mixins 在您的视图中提供 Ajax 处理的基本实现。

于 2012-05-17T18:27:06.160 回答