簡說django CBV執行流程,與部分原始碼分析

2021-09-24 23:35:45 字數 2814 閱讀 7725

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...

文案寫作 簡說

做產品離不開寫寫寫,寫些什麼呢!當然是各種文件嘍,有那麼幾個寫到懷疑人生有木有,反正我是常有的,說邏輯好,我邏輯算不上一頂一的好,但是算不到差的裡面,但是有一些邏輯有時候還是會把自己給繞進去,所以說文案寫作能力一定程度上會幫助你梳理你混亂的邏輯,也會幫助你更好地表達,到目前為止,我依舊不認為我的文案...