十一.Python_函数闭包模拟Session

 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()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值