Python_函数闭包模拟Session
# 19.函数闭包模拟Session
#模拟数据库
list_user=[{"name":"tom","password":"123"},
{"name": "cat", "password": "123"},
{"name": "ssh", "password": "123"},
{"name": "alex", "password": "123"},
{"name": "marry", "password": "123"},
{"name": "sam", "password": "123"}] #模拟数据库的用户
#模拟Session
curren_login={"name":None,"status":False} #当前登录状态
#判断用户登陆验证的装饰器
def validate(con): #获取@validator()的参数
def _validate(func): #获取目标函数
def wrapper(): #获取目标函数的参数
if(curren_login["name"] and curren_login["status"]): #获取当前登录状态是否存在用户登录
res = func(curren_login["name"]) #用户登录调用目标函数
return res #返回目标函数
print("欢迎来到京东商城!")
name=input("请输入用户名:") #用户没用登陆让用户输入用户名
password=input("请输入密码:") #用户没用登陆让用户输入用户密码
for i in list_user: #循环数据库的用户
if i["name"]==name: #判断该用户是否存在数据库中
if(password==i["password"]): #判断该用户的密码与数据库存储的密码是否一致
print("执行%s函数"%con) #输出要执行的函数
res=func(name) #用户登录成功调用目标函数
curren_login["name"]=name #设置登录状态的用户
curren_login["status"]=True #设置登录状态
return res #返回目标函数
else: #用户名或密码输入有误
print("您输入的用户名或密码有误!") #打印登陆失败的结果
return wrapper #将wrapper函数作为返回值
return _validate #将_validate函数作为返回值
#跳转jd首页
@validate("index") #相当于index=_validator(index)
def index(name="1223"):
print("%s!欢迎来到JD页面!"%name)
#跳转jd个人主页
@validate("home") #相当于home=_validator(home)
def home(name="1223"):
print("欢迎%s来到home!"%name)
#跳转jd购物车
@validate("shop") #相当于shop=_validator(shop)
def shop(name="1223"):
print("%s 购物车里有 零食 数码产品"%name)
index() #调用index函数
# home()
# shop()