第一部分講的大多都是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 另一種是雙向迴圈鍊錶。當列表中儲存的資料...