带参数的装饰器,比普通装饰器要多一层
from functools import wraps
class Decorators():
@classmethod
def usageRecorder(cls,name,description=None):
# 带参数的装饰器,比普通装饰器要多一层
def run(func):
@wraps(func)
def warp(*args, **kwargs):
res = func(*args, **kwargs)
if str(res.get('status')) == '200':
recordInfo(name,warp.__name__,description,'succ')
else:
recordInfo(name,warp.__name__,description,'err')
return res
return warp
return run
@classmethod
def log(cls,func):
@wraps(func)
def run(*args, **kwargs):
print('调用%s'%func.__name__)
return func(*args, **kwargs)
return run
##############################################
def recordInfo(name,funcNm,description,status):
sql = """update xx.xx
set {0} = {0}+1,update_time = current_timestamp
where
date_format(data_date,'%Y-%m-%d')=current_date
and name='{1}'
""".format(status,name)
res = mysql_exec(sql)
if res == 0:
if status == 'succ':
succ,err = 1,0
else:
succ,err = 0,1
sql = """insert into xx.xx
values
(current_date,{0},{1},{2},{3},current_timestamp,current_stamp)
""".format(funcNm,description,succ,err)
mysql_exec(sql)
def mysql_exec(sql):
print(sql)
return 0
##############################################
@Decorators.log
@Decorators.usageRecorder(name='测试',description='简单的一个函数')
def test(a,b):
print(a,b)
return {'url':'http://www.baidu.com','status':200}
if __name__ == '__main__':
res = test(1,2)
print(res)