Chinaunix首页 | 论坛 | 博客
  • 博客访问: 86956
  • 博文数量: 26
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 250
  • 用 户 组: 普通用户
  • 注册时间: 2015-08-12 22:31
文章分类

全部博文(26)

文章存档

2016年(26)

我的朋友

分类: Python/Ruby

2016-12-11 09:53:15

1,简单的装饰器



例子:装饰器用于权限验证的简单案例

  1. USER_INFO = {}            #定义全局变量,据此来判断是否登录成功


  2. def outer(func):
  3.     def inner(*args, **kwargs):
  4.         if USER_INFO.get("is_login", None): #先判断用户时候登录成功
  5.             r = func(*args,**kwargs)
  6.             return r
  7.         else:                                #登录不成功,则提示用户先登录
  8.             print("请先登录")
  9.     return inner


  10. def login(user, pwd):
  11.     if user == "alex" and pwd == "123456":
  12.         print("欢迎%s光临!" % (user,))
  13.         USER_INFO["is_login"] = True
  14.         return True
  15.     else:
  16.         print("用户名或者密码错误!")


  17. @outer
  18. def balance():
  19.     print("\n你的余额为:3000元整\n")


  20. @outer
  21. def point():
  22.     print("\n你的积分为:18000\n")


  23. @outer
  24. def personal_info():
  25.     print("\n你的个人信息为:xxxxxx\n")


  26. def main():
  27.     while True:
  28.         res = input("1,登录 2,积分查询 3,余额查询 4,个人信息查询\n请输入选择>>>")
  29.         if res == "1":
  30.             username = input("请输入用户名:")
  31.             password = input("请输入密码:")
  32.             login(username, password)
  33.         elif res == "2":
  34.             point()
  35.         elif res == "3":
  36.             balance()
  37.         elif res == "4":
  38.             personal_info()
  39.         else:
  40.             print("输入错误!请重新输入")
  41. main()



2,多层装饰器



例子:双层装饰器

  1. USER_INFO = {}        #判断是否登录成功
  2. USER_TYPE = {} #判断用户类型,是不是超级管理


  3. def check_login(func):
  4.     def inner(*args, **kwargs):
  5.         if USER_INFO.get("is_login", None):
  6.             r = func(*args, **kwargs)
  7.             return r
  8.         else:
  9.             print("请先登录")
  10.     return inner


  11. def check_admin(func):
  12.     def inner(*args, **kwargs):
  13.         if USER_TYPE.get("type", None) == 2:
  14.             r = func(*args, **kwargs)
  15.             return r
  16.         else:
  17.             print("你不是超级管理员,无权限!")
  18.     return inner


  19. def login(user, pwd):
  20.     if user == "alex" and pwd == "123":
  21.         print("欢迎%s光临!" % (user,))
  22.         USER_INFO["is_login"] = True
  23.         USER_TYPE["type"] = 1
  24.     elif user == "admin" and pwd == "123":
  25.         print("欢迎%s光临!" % (user,))
  26.         USER_INFO["is_login"] = True
  27.         USER_TYPE["type"] = 2
  28.     else:
  29.         print("用户名或者密码错误!")


  30. @check_login
  31. def balance():
  32.     print("\n你的余额为:3000元整\n")


  33. @check_login
  34. def point():
  35.     print("\n你的积分为:18000\n")


  36. @check_login --------->首先判断是否登录成功,然后再次判断是否为管理员
  37. @check_admin
  38. def admin():
  39.     print("你是超级管理员!")


  40. def main():
  41.     while True:
  42.         res = input("1,登录 2,积分查询 3,余额查询 4,超级管理员\n请输入选择>>>")
  43.         if res == "1":
  44.             username = input("请输入用户名:")
  45.             password = input("请输入密码:")
  46.             login(username, password)
  47.         elif res == "2":
  48.             point()
  49.         elif res == "3":
  50.             balance()
  51.         elif res == "4":
  52.             admin()
  53.         else:
  54.             print("输入错误!请重新输入")

  55. main()

多层装饰器。类似
还有更牛逼的装饰器以后web程序中会讲到,类似于@outer(before,after)

阅读(1381) | 评论(0) | 转发(0) |
0

上一篇:装饰器

下一篇:字符串格式化

给主人留下些什么吧!~~