小談CBV執行過程

2022-03-03 22:02:18 字數 2648 閱讀 4956

以 views.login.as_view() 為例:

執行views頁面中的login類中的as_view方法

執行as_view方法中的view方法

執行dispatch方法

在dispatch方法中進行判斷:

if request.method.lower() in ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']: ==> 通過反射去執行 ;

還是以 views.login.as_view() 為例: 在檢視中寫類時都是繼承於view類, 而as_view方法就是view類的乙個classonlymethod; 也就是說: 路由中執行的是login類的父類view中的

as_view方法 ; 在as_view方法中將login例項化的物件複製給self, as_view方法的最後呼叫dispatch方法; dispatch方法判斷request.method.lower()是否在8種請求方法中: 如果在, 通過反

射執行該方法( 就是我們在檢視中的login類下面寫的方法 ) ; 如果不在, 就執行http_method_not_allowed方法, 這個方法返回乙個http.httpresponsenotallowed: 頁面會提醒405

具體** :

)return http.httpresponsenotallowed(self._allowed_methods())為檢視中的類加裝飾器和函式加裝飾器情況不同, 尤其是有的裝飾器既需要加在函式上, 也需要加在類中方法上. 這時如果不用method_decorator, 可能會導致報錯( 因為類中方法比普通函式多乙個self

).

# 建議使用method_decorator

from django.utils.decorators import method_decorator

根據加裝飾器的需求不同, 這裡粗略的分成三種情況:

直接加在類中方法上

# 類中只有乙個或者幾個方法需要裝飾器, 而這個類中有些方法不需要裝飾器

@method_decorator(裝飾器名)

def get(self, request, *args, **kwargs):

直接加在類上
# 效果和上面差不多, 但是加在類中的某個方法上, 如果是多個方法都需要,可以重複寫多個

@method_decorator(裝飾器名,name='類中某個方法名')

class edittest(view):

# 為類中所有方法都加裝飾器: 因為類中方法的執行, 最後都是通過view類中的dispatch方法執行的

@method_decorator(裝飾器名,name='dispatch')

class edittest(view):

加在dispatch方法上
# 效果 和 加在類上,指定方法名為dispatch的方式一樣: 為類中方法全部加裝飾器

class edittest(view):

@method_decorator(裝飾器名)

def dispatch(self, request, *args, **kwargs):

super(edittest, self).dispatch(request, *args, **kwargs)

ASP執行儲存過程經驗談

1,利用sql server游標,這種方法的優點 適用性比較強,效能不是很好.儲存過程如下 create proc sp pageview sql varchar 8000 sql語句 pagecurnum int 1,當前頁,如果為空則為第一頁 pagesize int 10 每頁行數,黑認為10...

小程式執行執行過程原理 程式執行原理

計算機中包含有較多的硬體,但是乙個程式要執行,有三個核心的硬體,分別是 cpu 記憶體 硬碟 計算機中哪乙個硬體裝置負責執行程式?記憶體的速度快還是硬碟的速度快?我們的程式是安裝在記憶體中的,還是安裝在硬碟中的?我買了乙個記憶體條,有 500g 的空間!這句話對嗎?計算機關機之後,記憶體中的資料都會...

小談《金鎖記》

2005 1 18 金鎖記 是張愛玲1943年的作品。同年間的其他作品包括 傾城之戀 第一爐香 第二爐香 茉莉香片 等。張愛玲本人比較喜歡 傾城之戀 而許多讀者,包括 我在內比較傾向於中篇 金鎖記 張愛玲的大部分作品,讀者讀下來的感覺是蒼涼 凝重。我讀 金鎖記 這篇,更感受到 了命運的無奈。篇中幾位...