結論: 一般的裝飾器在裝飾api函式時登入驗證在上 鑑權在下, 意即, 先登入 再 鑑權
寫在前面閉包
閉包範例
def
out(func)
: variable =
'this is out variable'
definner()
(variable)
func(
)return inner
函式裝飾器
import functools
defout
(*args,
**kwargs)
:def
out(func)
:@functools.wraps
(func)
definner
(*args,
**kwargs)
:return func(
)return inner
return out
# 常見的 如 fastapi flask 等定義介面的方式便是採用這種帶引數的裝飾器來規定請求方式的
@out
('post'
)def
func()
:pass
類裝飾器# 1.定義登入認證裝飾器
import functools
defauthenticated
(func)
:@functools.wraps
(func)
definner1
(*args,
**kwargs)
('登入認證**'
) res = func(
*args,
**kwargs)
('登入認證後執行'
)return res
return inner1
# 2.定義鑑權裝飾器
defaccesstoken
(func)
:@functools.wraps
(func)
definner2
(*args,
**kwargs)
('鑑權**'
) res = func(
*args,
**kwargs)
('鑑權後執行'
)return res
return inner2
@authenticated
@accesstoken
defapi()
('api邏輯'
)return
api(
)
類裝飾器比之函式裝飾器更好理解
class
decorator()
:def
__init__
(self, func)
: self._func = func
def__call__
(self,
*args,
**kwargs)
:return self._func(
*args,
**kwargs)
@decorator
deffunc
(x):
return x
import functools
class
decorator()
:def
__init__
(self, method=
none):
self._method = method
def__call__
(self, func)
:@functools.wraps
(func)
def(
*args,
**kwargs)
:return func(
*args,
**kwargs)
@decorator
('post'
)def
func
(x):
return x
Python之實戰裝飾器拆解
目錄 1.函式既 變數 屬於可變化資料 2.高階函式 3.巢狀函式 函式是無關順序的,但是執行呼叫的函式必須在執行 前面 示例 變數 a 1,2 a為變數名,1,2 存放記憶體裡面 專業稱之變數體函式 def test1 test1 該函式的名字 如變數名a 內的 1,2 存放在記憶體裡面 專業稱之...
python裝飾器 Python 裝飾器
簡言之,python裝飾器就是用於拓展原來函式功能的一種函式,這個函式的特殊之處在於它的返回值也是乙個函式,使用python裝飾器的好處就是在不用更改原函式的 前提下給函式增加新的功能。一般而言,我們要想拓展原來函式 最直接的辦法就是侵入 裡面修改,例如 這是我們最原始的的乙個函式,然後我們試圖記錄...
python裝飾器 裝飾器
由於函式也是乙個物件,而且函式物件可以被賦值給變數,所以,通過變數也能呼叫該函式。def now print 2015 3 25 f now f 2015 3 25 函式物件有乙個 name 屬性,可以拿到函式的名字 now.name now f.name now 現在,假設我們要增強now 函式的...