#定义多个数据库 便于 装饰器来选择 参数
#为能 不改变 函数的内部代码 以及原先装饰器部分代码
#保证内层的函数能用到 参数 进行选择 执行
#要用再在原先的装饰器函数外嵌套一层 将外层参数传到内层 也是闭包的概念
usr_dict ={"name":None,"login_stat":False}
def auth(data="filedb"): #嵌套一个函数
def auth_func(func):
def wrapper(*args,**kwargs):
if usr_dict["login_stat"] == False:
name = input("用户名:").strip()
passwrd = input("密码:").strip()
if data == "filedb": #使用外层函数传来的变量
with open("test","r",encoding="utf-8") as f:
for filedict in f:
i = eval(filedict) #eval 取出来的值 本身是什么就是什么
if i["name"]==name and str(i["passwrd"])==passwrd:
usr_dict["login_stat"]=True
usr_dict["name"]=name
print("登陆成功")
res = func(*args,**kwargs)
print (res)
return res
else:
print("用户名密码有误")
elif data == "ldtp": #使用外层函数的传来的参数
print("鬼知道用什么方法")
res = func(*args, **kwargs)
print(res)
return res
else:
print("随便玩嘛") #使用外层函数传来的参数
res = func(*args, **kwargs)
print(res)
return res
else:
res = func(*args, **kwargs)
print(res)
return res
return wrapper
return auth_func
@auth("mysql")
def jd_shopping_car(name):
return "%s购物车[%s,%s]"%(name,"牛奶","面包")
@auth("filedb")
def jd_index():
return "欢迎来到京东"
@auth("ldtp")
def jd_home(name):
return "欢迎回家%s"%name
jd_shopping_car("产品经理")
jd_home("产品经理")
jd_index()