Django V部分總結二之CBV模式及其CSRF

2021-09-25 10:08:54 字數 2880 閱讀 2495

第一部分講的大多都是views函式,形如:

path(

'index/'

,views.index)

,def

index

(request)

:pass

這種形式成為fbv模式,意思就是乙個url對應的是乙個具體的函式

還有另一種形式叫做cbv模式,是乙個url對應乙個類,形式如下:

path(

'asset-json.html/'

,views.assetjsonview.as_view())

,from django.views import view

class

assetview

(view)

:'''拿頁面'''

defdispatch

(self, request,

*args,

**kwargs)

: ret =

super()

.dispatch(request,

*args,

**kwargs)

return ret

defget(self,request,

*args,

**kwargs)

:return render(request,

"asset.html"

)def

post

(self,request,

*args,

**kwargs)

:pass

首先,在views中定義的類是要繼承django中的view類的,而assetview中並未定義as_view()這個方法,所以它會去執行view中的as_view方法

而as_view方法的返回值就是乙個函式,這個函式是在as_view中的內部定義的

那麼在我們訪問url的時候,django會去呼叫這個view函式,view函式又去呼叫了self.dispatch方法,並返回了這個方法的返回值

所以檢視一下dispatch這個方法:

它就是對這個請求的method做了乙個反射的操作,找到這個請求型別對應的方法然後去執行它,lower()的作用就是把method中的get/post等大寫的方法名轉化成小寫的函式名,這樣我們只需要在類中定義好小寫的函式名就可以完成呼叫了

原理:url -> view方法 -> dispatch方法(反射執行其他:get/post/delete/put)

自定義dispatch方法的話,出了可以繼承原有方法之外,還可以自定義其他方法

以下是原始碼父類的部分已有函式:

效果是乙個url過來之後會找到對應的類,如果是get請求,就會執行類下面的get函式;

如果是post請求,就會執行類下面的post函式

如果是put請求,就會執行類下面的put函式(暫知ajax可發)

如果是delete請求,就會執行類下面的delete函式(暫知ajax可發)

get 查

post 建立

put 更新

delete 刪除

當然還有其它的,另外有乙個擴充套件點:dispath函式

首先fbv下前端請求處理處理通過csrf,詳見:

而在cbv模式下,暫未知前端請求處理通過csrf的方法、。

全域性下的crsf兩者相同,都是通過中介軟體的注釋與否

區域性控制方式有所不同

下面看cbv模式的的兩種方式:

from django.views import view

from django.views.decorators.ccsrf import csrf_exempt, csrf_protect

from django.utils.decorators import method_decorator

'''方法1'''

class

login

(view)

:# 注意:必須放在dispatch上【原始碼中反射處理的函式】,單獨方法是無效的!!

)'''方法2【推薦】'''

@ method_decorator(csrf_exempt, name=dispatch)

# dispatch是原始碼中反射處理的函式

)

兩種方式都是直接去掉整個類裡的所有方法,單獨函式處理無效

注:# # cbv應用裝飾器

django的bug,不能直接對類進行裝飾,必須使用 method_decorator,把裝飾器當作引數傳進去。

SQL之總結(二)

4.關於取兩個日期之間的年份 ceil months between sysdate,c.sendtime 12 worktime ceil n 取大於等於n的最小整數 floor n 取小於等於n的最大整數 5.如果某個欄位為空值則以 nbsp 代替 nvl c.phone,18677777777...

師兄面試總結程式設計部分解答之四

個人感覺樹的問題大部分都是用遞迴的思想。首先定義樹節點結構體 typedef struct treenode treenode,treenodeptr 構造搜尋二叉樹 根據輸入內容構造二叉查詢 treenodeptr constructtree else treenodeptr tmpnode ne...

Redis之資料結構及優化部分總結

redis 中,鍵的資料型別是字串,但是為了豐富資料儲存的方式,方便開發者使用,值的資料型別有很多,常用的資料型別有這樣幾種,它們分別是字串 列表 字典 集合 有序集合。字串和普通的字串沒什麼區別 這種資料型別對應兩種實現方法,一種是壓縮列表 ziplist 另一種是雙向迴圈鍊錶。當列表中儲存的資料...