Django报错:AttributeError: 'function' object has no attribute 'as_view'

在学习Django视图策略的时候,使用基于类的视图 (CBV),遇到了一个问题:

re_path(r'^new_post/$', views.NewPostView.as_view(), name='new_post'),

AttributeError: 'function' object has no attribute 'as_view'

先简单介绍一下CBV:

基于类的视图 (CBV)

CBV是View类的集成类。这里的主要区别在于请求是以HTTP方法命名的类方法内处理的,例如GETPOSTPUTHEAD等。

所以,在这里,我们不需要做一个条件来判断请求是一个POST还是它是一个GET。代码会直接跳转到正确的方法中。在View类中内部处理了这个逻辑。

我的视图如下:


view.py

url:

re_path(r'^new_post/$', views.NewPostView.as_view(), name='new_post'),

最终在Stack Overflow上找到了答案,在这个类上不能使用@login_required这个装饰器,而需要使用method_decorator,并传递一个装饰器(或一个装饰器列表)并告诉应该装饰哪个类。在 CBV 中,装饰调度类是很常见的。它是一个Django内部使用的方法(在View类中定义)。所有的请求都会经过这个类,所以装饰它会相对安全。如下,注意导入模块from django.utils.decoratorsimport method_decorator:

这样问题就解决了,这里贴上Stack Overflow原回答链接:Django/python: 'function' object has no attribute 'as_view' - Stack Overflow

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。