为写好的装饰器加上参数

#!/user/bin/python
# -*- coding:utf-8 -*-
#定义人员列表
user_list = [
{"name":"alex","passwd":"123"},
{"name":"linhaifeng","passwd":"123"},
{"name":"wupeiqi","passwd":"123"},
{"name":"yuanhao","passwd":"123"},
]
#这是定义的返回状态
current_dic = {"username":None,"login":False}
#定义带参数的装饰器
def auth(auth_type= "filedb"):
#定义装饰器
def auth_func(func):
def wrapper(*args,**kwargs):
print("认证类型是",auth_type)
if auth_type == "filedb":
if current_dic["username"] and current_dic["login"]:
res = func(*args,**kwargs)
return res
username = input("用户名:").strip()
passwd = input("密码:").strip()
for userdic in user_list:
if username == userdic["name"] and passwd == userdic["passwd"]:
current_dic["username"] = username
current_dic["passwd"] = True
res = func(*args,**kwargs)
return res
else:
print("用户名或密码错误")
elif auth_type == "ldap":
print("鬼才特么会玩")
res = func(*args,**kwargs)
return res
else:
print("鬼才知道你用的什么认证方式")
res = func(*args,**kwargs)
return res
return wrapper
return auth_func
#定义京东首页功能
@auth(auth_type="filedb") #auth_func = auth(auth_type = "filedb") 得到的是auth_func的内存地址,附加了一个auth_type
def index():
print("欢迎登陆京东网页")
#定义家目录功能
@auth(auth_type="ldap")
def home(name):
print("%s欢迎回家" %name)
# #定义购物车功能
@auth(auth_type="sssssss")
def shopping_car(name):
print("%s购物车中的商品有[%s,%s,%s]" %(name,"奶茶","妹妹","娃娃"))
#调用首页
print("before-->",current_dic)
index()
#调用家功能
# print("after-->",current_dic)
home("产品经理")
# #调用购物车功能
shopping_car("产品经理")


猜你喜欢

转载自www.cnblogs.com/zhang-da/p/10977372.html