0
在Django文檔Class based views - Mixins我發現關於使用混入的那包裹as_view()
方法來提供額外的功能下面的代碼片斷:Django的混入該渦卷as_view()
from django.contrib.auth.decorators import login_required
class LoginRequiredMixin(object):
@classmethod
def as_view(cls, **initkwargs):
view = super(LoginRequiredMixin, cls).as_view(**initkwargs)
return login_required(view)
class MyView(LoginRequiredMixin, ...):
# this is a generic view
...
在上面的例子筆者包裹標準as_view()
方法,以便從LoginRequiredMixin
繼承的每個視圖都通過login_required
裝飾器。
我的問題是這樣的:這條線的工作
view = super(LoginRequiredMixin, cls).as_view(**initkwargs),
不應View
以及MyView
繼承?否則,我相信超級電話會失敗,原因是object
沒有as_view()
方法。
在此先感謝。
在示例代碼中,由於3個點可能不夠清楚,但MyView似乎僅從LoginRequiredMixin繼承,而不是View繼承。我假設super會失敗的原因是MyView不能從View繼承(我只看到3個點),結果沒有as_view()方法來調用super。所以,不管MRO,我是否正確? – kstratis
@ Konos5對不起,我誤解了你的問題,我以爲你在問'LoginRequiredMixin'的基類。在我的腦海中,我自動地用適當的課程替換'...'。P但無論如何,你是對的,我更新了我的答案。這就是爲什麼它是一個_view_ mixin。 – knbk
太棒了!這正是我想知道的!贊成視圖繼承解釋也! – kstratis