Django 什么';装饰基于类的视图的两种方法之间的区别是什么?

Django 什么';装饰基于类的视图的两种方法之间的区别是什么?,django,django-views,Django,Django Views,我正在编写一个从ListView继承的视图,并试图将该视图限制为登录用户 表示在URLconf中需要使用login_进行装饰“在每个实例的基础上应用装饰器。如果希望装饰视图的每个实例,则需要采用不同的方法”-这种方法是装饰视图代码中的分派方法 我以为我知道类和实例之间的区别,但是这个短语对我来说没有任何意义。有人能澄清一下吗?除了在URLconf中有一个装饰器而不是在类定义中,这两种方法之间有什么区别 上面的这段链接似乎回答了这个问题:“因为基于类的视图不是函数,所以根据您是使用as_视图还是创

我正在编写一个从ListView继承的视图,并试图将该视图限制为登录用户

表示在URLconf中需要使用login_进行装饰“在每个实例的基础上应用装饰器。如果希望装饰视图的每个实例,则需要采用不同的方法”-这种方法是装饰视图代码中的分派方法

我以为我知道类和实例之间的区别,但是这个短语对我来说没有任何意义。有人能澄清一下吗?除了在URLconf中有一个装饰器而不是在类定义中,这两种方法之间有什么区别

上面的这段链接似乎回答了这个问题:“因为基于类的视图不是函数,所以根据您是使用as_视图还是创建子类,对它们进行修饰的方式会有所不同。”


真的吗??我似乎能够将URLconf方法用于我的ListView子类。

假设您有以下基于类的视图:

class PostListView(ListView):
     model = Post

ProtectedPostListView = login_required(PostListView.as_view())
和您的URL.py:

url(r'posts$', ProtectedPostListView)
如果您使用这种方法,那么您将失去对
ProtectedPostListView
进行子类化的能力,例如

class MyNewView(ProtectedPostListView):
    #IMPOSSIBLE
这是因为
.as_view()
返回一个函数,在应用
login\u required
decorator之后,您就剩下了一个函数,所以子类化是不可能的

另一方面,如果使用第二种方法,即使用方法decorator,子类化是可能的。 e、 g

class PostListView(ListView):
     model = Post

     @method_decorator(login_required)
     def dispatch(self, *args, **kwargs):
         return super(PostListView, self).dispatch(*args, **kwargs)

class MyNewView(PostListView):
     #LEGAL