cbv(class base views)就是在檢視裡使用類處理請求。
python是乙個物件導向的程式語言,如果只用函式來開發,有很多物件導向的優點就錯失了(繼承、封裝、多型)。所以django在後來加入了class-based-view。可以讓我們用類寫view。這樣做的優點主要下面兩種:
提高了**的復用性,可以使用物件導向的技術,比如mixin(多繼承)
可以用不同的函式針對不同的http方法處理,而不是通過很多if判斷,提高**可讀性
首先看我們的urls.py中
#呼叫as_view執行後返回view,在view中呼叫了dispatch方法
# urls.py
from django.conf.urls import url
urlpatterns =
[ url(r'^index/$'
, myview.as_view())
,]
原始碼查詢順序
as_view---->view—>dispatch(根據請求方式不同,執行不同函式)
原始碼如下:
as_view函式
class
view
(object):
#類方法as_view=
@classonlymethod
defas_view
(cls,
**initkwargs)
:"""
main entry point for a request-response process.
"""#initkwargs為傳入的字典形式的內容,正常是不傳的
for key in initkwargs:
#http_method_names為8大方法: http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']
)#這是呼叫了as_view後返回的函式位址為view,然後執行view
defview
(request,
*args,
**kwargs)
: self = cls(
**initkwargs)
ifhasattr
(self,
'get'
)and
nothasattr
(self,
'head'):
self.head = self.get
self.request = request
self.args = args
self.kwargs = kwargs
#在view中執行了dispatch方法,dispatch方法如下:
return self.dispatch(request,
*args,
**kwargs)
view.view_class = cls
view.view_initkwargs = initkwargs
# take name and docstring from class()
)# and possible attributes set by decorators
# like csrf_exempt from dispatch()
)#######呼叫as_view執行後返回view,在view中呼叫了dispatch方法
return view
#dispatch方法用於匹配請求,校驗請求,並執行類檢視函式
def
dispatch
(self, request,
*args,
**kwargs)
:# try to dispatch to the right method; if a method doesn't exist,
# defer to the error handler. also defer to the error handler if the
#如果在8大方法中我們就執行
簡說電腦程式是如何執行的
程式源 都是以人類語言寫成的。需要將人類語言翻譯為計算機語言。計算機能聽懂的語言,就叫做機器語言,簡稱機器碼。計算機處理器提供了一套它能夠支援的運算操作的集合,稱為 指令集 指令集限定了該處理器能夠進行的所有運算。而且這些運算通常都是關於數字的運算。所以,如果想解決乙個問題,那麼首先要把這個問題轉換...
簡說狀態模式
在狀態模式中,抽象狀態介面,定義統一的方法型別。子類實現該介面,補充具體的實現行為。乙個物件類,內部有狀態例項,並且有切換狀態的成員函式。當接收到外界的值 改變因素 時,在物件類的內部實現動態的狀態切換。塊 狀態模式 public class test 具體狀態實現a class statea im...
文案寫作 簡說
做產品離不開寫寫寫,寫些什麼呢!當然是各種文件嘍,有那麼幾個寫到懷疑人生有木有,反正我是常有的,說邏輯好,我邏輯算不上一頂一的好,但是算不到差的裡面,但是有一些邏輯有時候還是會把自己給繞進去,所以說文案寫作能力一定程度上會幫助你梳理你混亂的邏輯,也會幫助你更好地表達,到目前為止,我依舊不認為我的文案...