Python实现带参数的用户验证功能装饰器示例


Posted in Python onDecember 14, 2018

本文实例讲述了Python实现带参数的用户验证功能装饰器。分享给大家供大家参考,具体如下:

user_list = [
  {'name': 'sb1', 'passwd': '123'},
  {'name': 'sb2', 'passwd': '123'},
  {'name': 'sb3', 'passwd': '123'},
  {'name': 'sb4', 'passwd': '123'}
]
# 初始状态,用来保存登陆的用户,
client_dic = {'username': None, 'login': False}
# 添加新功能
def auth(auth_type='filedb'):
  def auth_func(func):
    def wrapper(*args, **kwargs):
      print(auth_type)
      if auth_type == 'fildb':
      # 参数检查,判断是否有用户登录,如果有,不用验证,直接执行函数的功能
        if client_dic['username'] and client_dic['login']:
          res = func(*args, **kwargs)
          return res
        # 输入用户名和密码
        username = input('用户名:').strip()
        passwd = input('passwd:').strip()
        # 对比列表,检查用户名和密码是否正确
        for user_dic in user_list:
          if username == user_dic['name'] and passwd == user_dic['passwd']:
            client_dic['username'] = user_dic['name']
            client_dic['login'] = True
            res = func(*args, **kwargs)
            return res
        else:
          print('用户名或者密码错误!')
      elif auth_type == 'pass':
        print('不知道什么验证方式')
        res = func(*args, **kwargs)
        return res
      else:
        print('一脸蒙蔽的验证方式')
        res = func(*args, **kwargs)
        return res
    return wrapper
  return auth_func
@auth(auth_type='filedb')
def index():
  print("欢迎来到主页")
@auth(auth_type='user')
def home(name):
  print("欢迎回家:%s" % name)
@auth(auth_type='pass')
def shoppping_car():
  print('购物车里有[%s,%s,%s]' % ('奶茶', '妹妹', '娃娃'))
print(client_dic)
index()
print(client_dic)
home('root')

运行结果:

{'username': None, 'login': False}
filedb
一脸蒙蔽的验证方式
欢迎来到主页
{'username': None, 'login': False}
user
一脸蒙蔽的验证方式
欢迎回家:root

更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python中的字典与成员运算符初步探究
Oct 13 Python
Python利用前序和中序遍历结果重建二叉树的方法
Apr 27 Python
Python格式化日期时间操作示例
Jun 28 Python
pandas 实现字典转换成DataFrame的方法
Jul 04 Python
django利用request id便于定位及给日志加上request_id
Aug 26 Python
selenium在执行phantomjs的API并获取执行结果的方法
Dec 17 Python
PyQt5响应回车事件的方法
Jun 25 Python
wxPython电子表格功能wx.grid实例教程
Nov 19 Python
keras 使用Lambda 快速新建层 添加多个参数操作
Jun 10 Python
解决运行出现'dict' object has no attribute 'has_key'问题
Jul 15 Python
python属于哪种语言
Aug 16 Python
python中绕过反爬虫的方法总结
Nov 25 Python
Python面向对象之类和对象属性的增删改查操作示例
Dec 14 #Python
用python爬取租房网站信息的代码
Dec 14 #Python
从运行效率与开发效率比较Python和C++
Dec 14 #Python
对python产生随机的二维数组实例详解
Dec 13 #Python
详解Python with/as使用说明
Dec 13 #Python
在python中以相同顺序shuffle两个list的方法
Dec 13 #Python
对python GUI实现完美进度条的示例详解
Dec 13 #Python
You might like
深入探讨PHP中的内存管理问题
2011/08/31 PHP
php提示Call-time pass-by-reference has been deprecated in的解决方法[已测]
2012/05/06 PHP
PHP中的str_repeat函数在JavaScript中的实现
2013/09/16 PHP
PHP微商城开源代码实例
2019/03/27 PHP
取选中的radio的值
2010/01/11 Javascript
javascript中的作用域scope介绍
2010/12/28 Javascript
JQuery入门——事件切换之toggle()方法应用介绍
2013/02/05 Javascript
JQuery实现样式设置、追加、移除与切换的方法
2015/06/11 Javascript
谈谈PHP中相对路径的问题与绝对路径的使用
2016/08/16 Javascript
node.js中的事件处理机制详解
2016/11/26 Javascript
JavaScript实现的select点菜功能示例
2017/01/16 Javascript
前端跨域的几种解决方式总结(推荐)
2017/08/16 Javascript
Node.js使用MySQL连接池的方法实例
2018/02/11 Javascript
使用vue中的v-for遍历二维数组的方法
2018/03/07 Javascript
vue中使用iview自定义验证关键词输入框问题及解决方法
2018/03/26 Javascript
获取layer.open弹出层的返回值方法
2018/08/20 Javascript
微信小程序实现列表页的点赞和取消点赞功能
2018/11/02 Javascript
微信小程序自定义toast组件的方法详解【含动画】
2019/05/11 Javascript
举例区分Python中的浅复制与深复制
2015/07/02 Python
Python实现在线音乐播放器
2017/03/03 Python
Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息示例
2017/08/21 Python
Pytorch to(device)用法
2020/01/08 Python
OpenCV灰度化之后图片为绿色的解决
2020/12/01 Python
HTML5 input元素类型:email及url介绍
2013/08/13 HTML / CSS
美国名牌太阳镜折扣网站:Eyedictive
2017/05/15 全球购物
哈萨克斯坦最大的时装、鞋子和配饰在线商店:Lamoda.kz
2019/11/19 全球购物
Jones New York官网:美国女装品牌,受白领女性欢迎
2019/11/26 全球购物
个人求职简历的自我评价
2013/10/19 职场文书
教师岗位职责范本
2013/12/29 职场文书
小学新学期教师寄语
2014/01/18 职场文书
老人祝寿主持词
2014/03/28 职场文书
化工操作工岗位职责
2014/04/29 职场文书
派出所班子党的群众路线对照检查材料思想汇报
2014/10/01 职场文书
会议承办单位欢迎词
2015/09/30 职场文书
小学美术教学反思
2016/02/17 职场文书
Spring中bean集合注入的方法详解
2022/07/07 Java/Android