在Django docs Class based views - Mixins中,我找到了以下关于使用包含as_view()
方法的mixin来提供额外功能的片段:
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()
方法包装在mixin中,以便从LoginRequiredMixin
继承的每个视图都通过login_required
装饰器。
我的问题是:让这条线路起作用
view = super(LoginRequiredMixin, cls).as_view(**initkwargs),
不应该MyView
继承View
吗?否则,我认为由于object
没有as_view()
方法,对super的调用会失败。
提前致谢。
答案 0 :(得分:2)
您应该从任何基于类的通用视图继承。 Django定义的所有通用视图都从基类View
类继承。三个点(...
)是任何通用视图类的占位符,它们不是文字的(这样做会出现语法错误)。
顺便说一句,装饰基于类的视图最常用的方法是使用dispatch
中的method_decorator
将django.utils.decorators
方法包装在装饰器中。另请查看decorating class-based views。