标签:
今日目录:
多层装饰器
字符串格式化
生成器和迭代器
递归
模块
一. 多层装饰器
还是上一篇的那个例子,关于用户管理程序:登录用户管理程序,查看用户信息的时候,系统要提示登录,登录验证成功后普通用户可以查看自己信息,管理员登录后才可以进入管理界面,普通用户提示权限不足,这样一来,就可以重新写下程序,来两个装饰器来装饰;
#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Author: DBQ(Du Baoqiang) #先定义一个用户字典,判断用户状态,用户身份等 USER_INFO = {‘user_state‘: False, ‘admin_flag‘:2} #搞一个装饰器,装饰管理后台,检查用户身份等 def outer(func): def inner(*args,**kwargs): if USER_INFO[‘user_state‘]: result = func(*args,**kwargs) return result else: print(‘你没有登陆系统,请登陆后再操作!‘) return inner #在定义一个check_manager装饰器,用户检测用户登录身份是管理员还是普通用户 def check_manager(func): def inner(*args, **kwargs): if USER_INFO[‘admin_flag‘] == 0: result = func(*args,**kwargs) return result else: print(‘权限不足!‘) return inner #管理后台函数被装饰的时候,从下到上渲染,解释执行的时候是从上到下执行,所以先使用outer装饰, 再使用check_manager @outer @check_manager def manager(): print(‘欢迎登陆到管理员界面‘) #检查用户身份函数 @outer def checkuser(username): if USER_INFO[‘admin_flag‘] == 0: print(‘{} 您的用户是管理员身份‘.format(username)) else: print(‘{} 普通用户啦‘.format(username)) #登录函数 def login(username,userpwd): if username == ‘tom‘ and userpwd == ‘123‘: USER_INFO[‘user_state‘] = True USER_INFO[‘current_user‘] = username USER_INFO[‘admin_flag‘] = 0 manager() elif username == ‘jerry‘ and userpwd == ‘123‘: USER_INFO[‘user_state‘] = True USER_INFO[‘current_user‘] = username USER_INFO[‘admin_flag‘] = 1 else: print(‘用户名或者密码错误!‘) #print(‘欢迎登陆 %s‘ %username) #主函数 def main(): while True: print(‘1: 管理后台 2: 登陆 3. 检查用户身份 4. 退出‘) user_input_num = input(‘选择下吧:‘).strip() if user_input_num == ‘1‘: result = manager() elif user_input_num == ‘2‘: username = input(‘请输入您的用户名:‘).strip() userpwd = input(‘密码‘).strip() login(username,userpwd) elif user_input_num == ‘3‘: checkuser(USER_INFO.get(‘current_user‘,None)) elif user_input_num == ‘4‘: print(‘Bye‘) break if __name__ == ‘__main__‘: main()
使用一个多层装饰器来装饰同一个用户身份、权限等;
#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Author: DBQ(Du Baoqiang) #先定义一个用户字典,判断用户状态,用户身份等 USER_INFO = {‘user_state‘: False, ‘admin_flag‘:2} #搞一个装饰器,装饰管理后台,检查用户身份等 def outer(func): def inner(*args,**kwargs): if USER_INFO[‘user_state‘]: if USER_INFO[‘admin_flag‘] == 0: result = func(*args,**kwargs) return result else: print(‘权限不足!‘) else: print(‘你没有登陆系统,请登陆后再操作!‘) return inner # 在定义一个check_manager装饰器,用户检测用户登录身份是管理员还是普通用户 # def check_manager(func): # def inner(*args, **kwargs): # if USER_INFO[‘admin_flag‘] == 0: # result = func(*args,**kwargs) # return result # else: # print(‘权限不足!‘) # return inner #只使用一个装饰器装饰 @outer def manager(): print(‘欢迎登陆到管理员界面‘) #检查用户身份函数 @outer def checkuser(username): if USER_INFO[‘admin_flag‘] == 0: print(‘{} 您的用户是管理员身份‘.format(username)) else: print(‘{} 普通用户啦‘.format(username)) #登录函数 def login(username,userpwd): if username == ‘tom‘ and userpwd == ‘123‘: USER_INFO[‘user_state‘] = True USER_INFO[‘current_user‘] = username USER_INFO[‘admin_flag‘] = 0 manager() elif username == ‘jerry‘ and userpwd == ‘123‘: USER_INFO[‘user_state‘] = True USER_INFO[‘current_user‘] = username USER_INFO[‘admin_flag‘] = 1 else: print(‘用户名或者密码错误!‘) #print(‘欢迎登陆 %s‘ %username) #主函数 def main(): while True: print(‘1: 管理后台 2: 登陆 3. 检查用户身份 4. 退出‘) user_input_num = input(‘选择下吧:‘).strip() if user_input_num == ‘1‘: result = manager() elif user_input_num == ‘2‘: username = input(‘请输入您的用户名:‘).strip() userpwd = input(‘密码‘).strip() login(username,userpwd) elif user_input_num == ‘3‘: checkuser(USER_INFO.get(‘current_user‘,None)) elif user_input_num == ‘4‘: print(‘Bye‘) break if __name__ == ‘__main__‘: main()
标签:
原文地址:http://www.cnblogs.com/dubq/p/5563115.html