Python Django mixin包装为_view()

Python Django mixin包装为_view(),python,django,django-views,multiple-inheritance,mixins,Python,Django,Django Views,Multiple Inheritance,Mixins,在Django文档中,我发现了以下关于使用mixin的片段,mixin将包装为\u view()方法以提供额外功能: from django.contrib.auth.decorators import login_required class LoginRequiredMixin(object): @classmethod def as_view(cls, **initkwargs): view = super(LoginRequiredMixin, cls)

在Django文档中,我发现了以下关于使用mixin的片段,mixin将
包装为\u 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
...
在上面的示例中,作者将标准的
包装为mixin中的\u view()
方法,以便从
LoginRequiredMixin
继承的每个视图都通过
login\u required
装饰器

我的问题是:为了让这条线发挥作用

view = super(LoginRequiredMixin, cls).as_view(**initkwargs), 
MyView
不也应该从
View
继承吗?否则,我认为对super的调用将失败,因为
object
没有
as\u view()
方法


提前感谢。

您应该从任何基于类的通用视图继承。Django定义的所有通用视图都继承自基本
视图
类。这三个点(
)是任何通用视图类的占位符,它们不能被视为文字(这样做会导致语法错误)


顺便说一句,修饰基于类的视图的最常见方法是使用
django.utils.decorators
中的
方法\u decorator
dispatch
方法包装到修饰器中。也请查收

在示例代码中,由于3个点,可能不够清晰,但MyView似乎只继承LoginRequiredMixin而不是View。我对super将失败的假设是基于这样一个事实:MyView可能不会从View继承(我只看到3个点),因此super无法调用as_View()方法。那么,不管MRO如何,我说的对吗?@Konos5啊,对不起,我误读了你的问题,我以为你在问
LoginRequiredMixin
的基类。在我的头脑中,我自动地用适当的class:P替换
,但无论如何,你是正确的,我更新了我的答案。这就是为什么这是一个景观融合。太好了!这正是我想知道的!对于视图继承的解释也竖起大拇指!