user_info={} 首先定义一个空字典,作为后面的判断依据
def check_login(func): 装饰器1:用来检查用户是否登录,通过字典user_info里面is_login的键值,当键值存在的时候即(None)表示用户已登录
def inner(*args,**kwargs):
if user_info.get("user_login",None):
ret=func(*args,**kwargs)
return ret
else:
print("请登录")
return inner
def check_manager(func): 装饰器2:用来检查用户权限,通过user_type键值判断,当键值存在并且为2的时候说明用户具有权限
def inner(*args,**kwargs):
if user_info.get("user_login",None)==2:
ret=func(*args,**kwargs)
return ret
else:
print("权限不够")
return inner
@check_login() 函数一:被一个装饰器@check_login装饰,当用户登录后即可调用函数home()
def home():
print("普通用户")
@check_login 函数二:被两个装饰器装饰,当用户登录后,并且具有权限才能调用函数manager()
@check_manager 注意:这里两个装饰器分先后,先检查是否登录,然后检查是否具有权限。
def manager():
print("管理用户")
def login(*args,**kwrags):
user=input("用户名:")
pwd=input("密码:")
if user=="administrator":
user_info[is_login]=True
user_info[user_type]=2
else:
user_info[is_login]=True
def main():
choice=input("1 登录,2 查看信息,3 管理")
if choice=1:
login()
elif choice=2:
home()
elif choice=3:
manager()
调用主函数:
main()
实现结果:
未登录前是不能 2 查看信息 3管理
其它用户登录后只能查看“普通用户”
当用administrator登录后,才能查看“管理用户”