函数闭包为函数加上认证功能

1.登陆账号

user_dic ={'username':None,'login':False}

def auth_func(func):
def wrapper(*args,**kwargs): if user_dic['username'] and user_dic['login']:
res = func(*args,**kwargs)
return res username = input('账号:').strip()
passwd = input('密码:').strip()
if username == 'abcd' and passwd == '':
user_dic['username'] = username
user_dic['login'] = True
print('登陆成功!')
res=func(*args,**kwargs)
return res
else:
print('用户名或密码错误')
return wrapper @auth_func
def index():
print('欢迎光临本网站') @auth_func
def home(name):
print('欢迎%s回家' % name) index()
home('小明')

运行结果:

账号:abcd
密码:123456
登陆成功!
欢迎小明回家 Process finished with exit code 0

2.检测已有账号登陆

user_list=[{'name':'abcd','passwd':''},
{'name':'abd','passwd':''},
{'name':'acc','passwd':''},
{'name':'asdfg','passwd':''}
]
user_dac ={'username':None,'login':False} # 获取刚开始登陆之前的状态 def auth_func(func):
def wrapper(*args,**kwargs): if user_dac['username'] and user_dac['login']: # 获取刚开始登陆之前的状态,是否已登录
res = func(*args,**kwargs)
return res username = input('账号:').strip()
passwd = input('密码:').strip()
for user_dic in user_list:
if username == user_dic['name'] and passwd == user_dic['passwd']:
user_dac['username'] = username
user_dac['login'] = True
print('登陆成功!')
res=func(*args,**kwargs)
return res
else:
print('用户名或密码错误')
return wrapper @auth_func
def index():
print('欢迎光临本网站') @auth_func
def home(name):
print('欢迎%s回家' % name) index()
home('sb')

运行结果:

账号:abd
密码:123
登陆成功!
欢迎光临本网站
欢迎sb回家 Process finished with exit code 0

最新文章

  1. Android中处理崩溃异常
  2. Chrome F12学习
  3. VMvare克隆复制多个操作系统
  4. 山东理工大学第七届ACM校赛-完美素数 分类: 比赛 2015-06-26 10:36 15人阅读 评论(0) 收藏
  5. SqlServer之代码块相关
  6. nativescript环境搭建
  7. 关于jQuery,$(":button") 中的冒号是什么意思?
  8. Linux系统编程(24)——信号的生命周期
  9. SVG 和字符图标
  10. 2013Esri全球用户大会之解读Web GIS
  11. Django编写RESTful API(六):ViewSets和Routers
  12. 2015211230554《Java程序设计》第6周学习总结
  13. Python扩展方法一二事
  14. 做双网卡绑定_______物理机在双网卡的情况下做多IP绑定
  15. PhoenixFD插件流体模拟——UI布局【Splash | Mist】详解
  16. Element transfer 两边数据(左右)的显示问题?
  17. 用FileZilla链接Linux服务器
  18. 安装jumpserver
  19. python爬虫(二)
  20. install ros-indigo-map-msgs

热门文章

  1. WEB传参调用EXE
  2. cmd命令 taskkill
  3. python oracle 写文件 多个SQL变量问题
  4. Windows下压缩包安装Mysql
  5. flutter FloatingActionButton组件
  6. 我的一个PLSQL函数 先查询再插入数据库的函数 动态SQL拼接查询条件、通用游标、记录定义(封装部分查询字段并赋值给游标)、insert select 序列、常量【我】
  7. 查询数据,从链接地址中爬取文章内容jsoup
  8. osgearth 编译日志
  9. linux后台启动springboot并指定日志文件名称
  10. yii2 api接口 实现国际化多语言设置