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中for语句简单遍历数据的方法
May 07 Python
Linux 下 Python 实现按任意键退出的实现方法
Sep 25 Python
Python 文本文件内容批量抽取实例
Dec 10 Python
PyQt5+requests实现车票查询工具
Jan 21 Python
pyinstaller打包单个exe后无法执行错误的解决方法
Jun 21 Python
python读取.mat文件的数据及实例代码
Jul 12 Python
pandas数据处理进阶详解
Oct 11 Python
pytorch标签转onehot形式实例
Jan 02 Python
如何使用python自带IDLE的几种方法
Oct 10 Python
Python类的继承super相关原理解析
Oct 22 Python
python使用glob检索文件的操作
May 20 Python
基于Pygame实现简单的贪吃蛇游戏
Dec 06 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/04/12 PHP
对淘宝URL中ID提取的PHP代码
2013/09/01 PHP
php打包压缩文件之ZipArchive方法用法分析
2016/04/30 PHP
Yii 2.0如何使用页面缓存方法示例
2017/05/23 PHP
让JavaScript 轻松支持函数重载 (Part 1 - 设计)
2009/08/04 Javascript
jquery 缓存问题的几个解决方法
2013/11/11 Javascript
input禁止键盘及中文输入,但可以点击
2014/02/13 Javascript
ExtJs动态生成treepanel的Json格式
2015/07/19 Javascript
一起学写js Calender日历控件
2016/04/14 Javascript
轻松掌握JavaScript状态模式
2016/09/07 Javascript
对于Javascript 执行上下文的全面了解
2017/09/05 Javascript
react高阶组件经典应用之权限控制详解
2017/09/07 Javascript
JS Input里添加小图标的两种方法
2017/11/11 Javascript
微信小程序登录数据解密及状态维持实例详解
2019/05/06 Javascript
layer插件实现在弹出层中弹出一警告提示并关闭弹出层的方法
2019/09/24 Javascript
[02:32]DOTA2亚洲邀请赛 C9战队出场宣传片
2015/02/07 DOTA
巧用Python装饰器 免去调用父类构造函数的麻烦
2012/05/18 Python
Python入门学习之字符串与比较运算符
2015/10/12 Python
python+VTK环境搭建及第一个简单程序代码
2017/12/13 Python
详解Django 中是否使用时区的区别
2018/06/14 Python
python接口自动化(十六)--参数关联接口后传(详解)
2019/04/16 Python
Python爬取YY评级分数并保存数据实现过程解析
2020/06/01 Python
Python获取浏览器窗口句柄过程解析
2020/07/25 Python
python中实现栈的三种方法
2020/12/19 Python
html5唤醒APP小记
2019/03/27 HTML / CSS
马来西亚网上购物平台:ezbuy
2018/02/13 全球购物
Tirendo比利时:在线购买轮胎
2018/10/22 全球购物
size?爱尔兰官方网站:英国伦敦的球鞋精品店
2019/03/31 全球购物
SOA的常见陷阱或者误解是什么
2014/10/05 面试题
大学生简短的自我评价分享
2014/02/20 职场文书
历史专业大学生职业生涯规划书
2014/03/13 职场文书
幼儿园的门卫岗位职责
2014/04/10 职场文书
学校安全责任书
2014/04/14 职场文书
心理健康活动总结
2014/04/30 职场文书
中学生秋季运动会广播稿
2014/09/21 职场文书
一小时学会TensorFlow2之基本操作2实例代码
2021/09/04 Python