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