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 import自定义模块方法
Feb 12 Python
Android分包MultiDex策略详解
Oct 30 Python
Python实现的单向循环链表功能示例
Nov 10 Python
python表格存取的方法
Mar 07 Python
Python3实现取图片中特定的像素替换指定的颜色示例
Jan 24 Python
python画图的函数用法以及技巧
Jun 28 Python
python异步实现定时任务和周期任务的方法
Jun 29 Python
python随机模块random使用方法详解
Feb 14 Python
Python中zip()函数的解释和可视化(实例详解)
Feb 16 Python
详解Selenium-webdriver绕开反爬虫机制的4种方法
Oct 28 Python
python音频处理的示例详解
Dec 23 Python
用pip给python安装matplotlib库的详细教程
Feb 24 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的memory_limit限制的方法分享
2012/02/21 PHP
thinkphp分页集成实例
2017/07/24 PHP
PHP单元测试框架PHPUnit用法详解
2019/01/23 PHP
Thinkphp5框架ajax接口实现方法分析
2019/08/28 PHP
使用TextRange获取输入框中光标的位
2006/10/14 Javascript
下载站控制介绍字数显示的脚本 显示全部 隐藏介绍等功能
2009/09/19 Javascript
JavaScript Array扩展实现代码
2009/10/14 Javascript
JS对象与JSON格式数据相互转换
2012/02/20 Javascript
js取得url地址参数实例
2013/02/22 Javascript
快速获取/设置iframe内对象元素的几种js实现方法
2016/05/20 Javascript
JavaScript利用Date实现简单的倒计时实例
2017/01/12 Javascript
jQuery插件扩展操作入门示例
2017/01/16 Javascript
JS实现的数字格式化功能示例
2017/02/10 Javascript
100行代码理解和分析vue2.0响应式架构
2017/03/09 Javascript
easyui-datagrid开发实践(总结)
2017/08/02 Javascript
Vue动态组件实例解析
2017/08/20 Javascript
使用 Vue 绑定单个或多个 Class 名的实例代码
2018/01/08 Javascript
nodejs取得当前执行路径的方法
2018/05/13 NodeJs
详解vue-loader在项目中是如何配置的
2018/06/04 Javascript
微信小程序日历/日期选择插件使用方法详解
2018/12/28 Javascript
[01:20]PWL开团时刻DAY9——听说潮汐没用?
2020/11/10 DOTA
Python数据结构之翻转链表
2017/02/25 Python
python和ruby,我选谁?
2017/09/13 Python
使用Python实现企业微信的自动打卡功能
2019/04/30 Python
对PyQt5中树结构的实现方法详解
2019/06/17 Python
Python三元运算与lambda表达式实例解析
2019/11/30 Python
Python实现图像去噪方式(中值去噪和均值去噪)
2019/12/18 Python
python爬取王者荣耀全皮肤的简单实现代码
2020/01/31 Python
Python下使用Trackbar实现绘图板
2020/10/27 Python
Python爬虫之Selenium设置元素等待的方法
2020/12/04 Python
CSS3 特效范例整理
2011/08/22 HTML / CSS
EJB2和EJB3在架构上的不同点
2014/09/29 面试题
教师业务学习制度
2014/01/25 职场文书
初中生期末评语大全
2014/04/24 职场文书
2015年幼儿教育工作总结
2015/07/24 职场文书
班主任工作经验交流会总结
2015/11/02 职场文书