python装饰器实现用户密码认证(简单初形)

import time
current_user={'user':None}
def auth(engine = 'file'):
def deco(func): #func=最初始的index和最初始的home
def wrapper(*args,**kwargs):
if current_user['user']:
#如果成立说明current_user里面已经有用户信息,说明用户已经登录过,满足条件
#即会执行调用index home函数
res = func(*args, **kwargs) #调用最原始的index 同样也调用最原始的home,
return res

user=input('输入你的用户名:').strip()
pwd=input('输入你的密码:').strip()
if engine == 'file':
#基于文件的认证
if user == 'yangzhizong' and pwd == '123':
print('认证成功')
#记录用户登录状态
current_user['user']=user
res = func(*args, **kwargs)
return res
else:
print('用户名密码错误')

elif engine == 'mysql':
print('基于mysql的认证')
elif engine == 'idap':
print('基于idap的认证')
else:
print('无法识别认证来源')

return wrapper
return deco


# @timmer 2层是 3层此时可以理解为:@auth(engine = 'file')
#可以理解为上面这种情况
# x=auth(engine='file')
# @x
@auth(engine='file') #拿到了deco的返回值,最后调用index加(),输出结果 #deco #index=deco(index) #index=wrapper
def index():
time.sleep(1)
print('welcome to index page')

@auth(engine='file')
def home(name):
print('welcome %s to home page'%name )
time.sleep(0.5)

index()
home('yangzhizong')
posted @ 2018-06-12 14:48  yangzhizong  阅读(848)  评论(0编辑  收藏  举报