2012-05-17 27 views
1

我最近有一個Django的問題 - 答案的人離開我難住了:不能完全得到我的頭周圍的Django混入

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

我讀過Django的DOCO,但不能完全解決如何mixin與所要求的內容或答案所指的內容相關。

所以,我搜索了「django mixin tutorial」,偶然發現了一個叫做dajax和dajaxice的東西。好吧,我說謊,我碰到這個博客:

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

我的問題是: 什麼是混入?它們如何與ajax調用相關?他們用於除Ajax之外的其他東西嗎?爲什麼我要使用dajax或dajaxice或其他一些django插件框架,而不是簡單的django來使用ajax?

此外,沒有一個dajax標籤,但有一個用於stackoverflow的dajaxice標籤...這是否意味着dajaxice是走的路?

乾杯,

+0

據我所知,他不是指mixin,他是指基類。 – agf

回答

4

Mixins是一種通用的面向對象編程概念。他們並不特別與Django或Dajax等有關。然而,Django的確如此,而Dajax也可能使用mixin。

一般來說,「mixin」只是一個類,意思是與其他類混合在一起。它通常不會自己做任何事情,而只是增加了另一個類的功能。 Django的「抽象」模型概念就是一個mixin的例子。你永遠不會實例化一個抽象模型。相反,其他模型從抽象模型繼承,獲得其所有功能,並且它是實際被實例化的那些子類。

Django的基於類的視圖(這就是你在這裏提到的答案)也使用mixins。例如,大多數基於類的視圖繼承自TemplateResponseMixin。這個類本身並不是一個視圖,除非是基於類的視圖繼承,否則絕不會使用它。它僅僅是將模板渲染爲響應的所有功能的封裝,所以這可以在不違反DRY(不重複自己)的情況下「混合」到所有各種視圖中。

2

不,mixins與Ajax沒有什麼特別的關係。

mixin只是一個類,可以用作另一個類的多重繼承的一部分。 Django在基於類的視圖中廣泛使用了這些視圖 - 有些類提供了(例如)用於顯示錶單或模型列表的基本功能,而且您打算將它們與自己的類混合:創建自己的代碼,以實現您的自己擴展到該功能,同時繼承一個或多個mixin。

我從來沒有使用過Dajax,但我想它也使用mixins來提供視圖中Ajax處理的基本實現。