zoukankan      html  css  js  c++  java
  • python-day5-装饰器第二弹之多层装饰器

    多层装饰器

     1 #首先我们先实现一个简单的登陆与权限验证功能,注意看执行结果
     2 USER_INFO = {}
     3 
     4 def check_login(func):
     5     def inner(*args,**kwargs):
     6         if USER_INFO.get('is_login',None):
     7             ret = func(*args,**kwargs)
     8             return ret
     9         else:
    10             print('请登录!')
    11     return inner
    12 
    13 def check_admin(func):
    14     def inner(*args,**kwargs):
    15         if USER_INFO.get('user_type',None) ==2:
    16             nnn = func(*args,**kwargs)
    17             return nnn
    18         else:
    19             print('无权限查看')
    20     return inner
    21 
    22 
    23 @check_login
    24 @check_admin
    25 def index():
    26     print('index')
    27 @check_login
    28 def check_user():
    29     print('Ok')
    30 
    31 def login():
    32     user = input('请输入用户名!')
    33     if user == 'alex':
    34         USER_INFO['is_login'] = True
    35         USER_INFO['user_type'] = 1
    36     elif user == 'liguangxu':
    37         USER_INFO['is_login'] =True
    38         USER_INFO['user_type'] = 2
    39 
    40 def main():
    41     while True:
    42         a=input('1、登陆 2、查看信息 3、查看管理员权限:')
    43         if a == '1':
    44             login()
    45         elif a== '2':
    46             check_user()
    47         else:
    48             index()
    49 main()
    50 #首先使用alex用户登录后我们设置他具有普通权限有查看你信息的权限,无查看管理员权限
    51 >>>1、登陆 2、查看信息 3、查看管理员权限:1
    52 >>>请输入用户名!alex
    53 >>>1、登陆 2、查看信息 3、查看管理员权限:2
    54 >>>Ok
    55 >>>1、登陆 2、查看信息 3、查看管理员权限:
    56 >>>无权限查看
    57 #我们使用liguangxu用户继续登陆,赋给他管理员权限
    58 >>>1、登陆 2、查看信息 3、查看管理员权限:1
    59 >>>请输入用户名!liguangxu
    60 >>>1、登陆 2、查看信息 3、查看管理员权限:3
    61 >>>index
    62 >>>1、登陆 2、查看信息 3、查看管理员权限:2
    63 >>>Ok
    64 #使用查看信息功能时只验证是否登陆,而查看管理员权限则不仅需要验证是否登陆后,还需要验证是否具有管理员权限
    #两层装饰器,将check_admin以及index()函数当作参数传入check_login中,执行check_login函数体,遇到ret=func()执行check_admin以及index函数
    #将index函数当作参数传入check_admin中执行函数体遇到nnn=func()执行index函数体
     

  • 相关阅读:
    hdu 1250
    hdu 4540(简单dp)
    hdu 1078+hdu1978+hdu 1428
    hdu 2208(dfs)
    hdu 3639(强连通+缩点+建反向图)+hdu 3072(最小树形图)
    hdu 1317+hdu 1535(SPFA)
    hdu 1245(最短路+bfs)
    hdu 1286( 欧拉函数 )
    Elementary Methods in Number Theory Exercise 1.4.1
    Elementary Methods in Number Theory Exercise 1.4.2
  • 原文地址:https://www.cnblogs.com/liguangxu/p/5565121.html
Copyright © 2011-2022 走看看