Django报错:AttributeError: 'functi

2018-11-25  本文已影响0人  滄梧

在学习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

上一篇下一篇

猜你喜欢

热点阅读