django的類檢視擁有自動查詢指定方法的功能, 原始碼是通過as_view()
方法實現。
)為什麼as_view
能自動匹配指定的方法,先看原始碼:
@classonlymethod
defas_view
(cls,
**initkwargs)
:# 實際上是乙個閉包 返回 view函式
:# 作用:增加屬性, 呼叫dispatch方法
self = cls(
**initkwargs)
# 建立乙個 cls 的例項物件, cls 是呼叫這個方法的 類(demo)
ifhasattr
(self,
'get'
)and
nothasattr
(self,
'head'):
self.head = self.get
self.request = request # 為物件增加 request, args, kwargs 三個屬性
self.args = args
self.kwargs = kwargs
return self.dispatch(request,
*args,
**kwargs)
# 找到指定的請求方法, 並呼叫它
# 判斷請求的方法類檢視是否擁有, http_method_names=['get', 'post']
# 如果存在 取出該方法
# 執行該方法
簡化版
@classonlymethod
defas_view
(cls,
**initkwargs)
:# 實際上是乙個閉包 返回 view函式
""" main entry point for a request-response process.
"""defview
(request,
*args,
**kwargs)
:# 作用:增加屬性, 呼叫dispatch方法
self = cls(
**initkwargs)
# 建立乙個 cls 的例項物件, cls 是呼叫這個方法的 類(demo)
ifhasattr
(self,
'get'
)and
nothasattr
(self,
'head'):
self.head = self.get
self.request = request # 為物件增加 request, args, kwargs 三個屬性
self.args = args
self.kwargs = kwargs
return self.dispatch(request,
*args,
**kwargs)
# 找到指定的請求方法, 並呼叫它
# 判斷請求的方法類檢視是否擁有, http_method_names=['get', 'post']
# 如果存在 取出該方法
# 返回該請求方法執行的結果
再簡化
def
as_view()
:# 校驗 + 返回view方法
# 一些校驗..
.def
view()
:# 執行檢視
# 增加 為物件request, args, kwargs 屬性..
.return dispatch(
)# 呼叫指定的請求方法
return view
defdispatch()
:# 真正的查詢指定的方法, 並呼叫該方法..
.return handler(
)
呼叫順序: as_view --> view --> dispatch
希望有一天我也可以寫出這麼短小精幹的文章。
django整合xadmin的方法
xadmin是django的乙個第三方的管理後台實現,它的功能比自帶的admin功能更加強大。xadmin專案在github上的位址為 xadmin相關文件可以在這裡檢視 文件上有些地方寫的還是比較簡要,按照上面的步驟做,有時候報錯了可能還不知道什麼原因。這裡簡要總結下自己整合xadmin的方法,我...
django自帶的加密方法
1.匯入django自帶的加密演算法模組 from django.contrib.auth.hashers import make password,check password 2.make password 引數1,引數2,引數3 1.引數1 需要加密的字串 2.引數2 是否每次都生成不同的加密...
Django使用者驗證方法
這部分主要是需要保證 的一些敏感頁面不被普通遊客訪問到,需要一整套使用者系統 建立登陸頁面,與普通html頁面建立方法相同,比如下面這個最基本的登陸頁面 lang en charset utf 8 登陸title head action method post type text name user...