码迷,mamicode.com
首页 > 其他好文 > 详细

双层装饰器

时间:2016-09-24 21:52:09      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:

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登录后,才能查看“管理用户”

 

 

 

 

 

 

 

 

 

 

 

 

 

    

双层装饰器

标签:

原文地址:http://www.cnblogs.com/RomanticYori/p/5904135.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!