django的as view方法原始碼實現分析

2021-09-09 07:20:29 字數 4378 閱讀 7916

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