在學(xué)習(xí)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類的集成類暮胧。這里的主要區(qū)別在于請求是以HTTP方法命名的類方法內(nèi)處理的锐借,例如GET,POST往衷,PUT钞翔,HEAD等。
所以席舍,在這里布轿,我們不需要做一個條件來判斷請求是一個POST還是它是一個GET。代碼會直接跳轉(zhuǎn)到正確的方法中。在View類中內(nèi)部處理了這個邏輯驮捍。
我的視圖如下:
url:
re_path(r'^new_post/$', views.NewPostView.as_view(), name='new_post'),
最終在Stack Overflow上找到了答案疟呐,在這個類上不能使用@login_required這個裝飾器,而需要使用method_decorator东且,并傳遞一個裝飾器(或一個裝飾器列表)并告訴應(yīng)該裝飾哪個類启具。在 CBV 中,裝飾調(diào)度類是很常見的珊泳。它是一個Django內(nèi)部使用的方法(在View類中定義)鲁冯。所有的請求都會經(jīng)過這個類,所以裝飾它會相對安全色查。如下薯演,注意導(dǎo)入模塊from django.utils.decoratorsimport method_decorator:
這樣問題就解決了,這里貼上Stack Overflow原回答鏈接:Django/python: 'function' object has no attribute 'as_view' - Stack Overflow