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动态加载变量示例分享
Feb 17 Python
python中matplotlib实现最小二乘法拟合的过程详解
Jul 11 Python
浅谈Python NLP入门教程
Dec 25 Python
python实现爬取图书封面
Jul 05 Python
Python常用特殊方法实例总结
Mar 22 Python
python计算无向图节点度的实例代码
Nov 22 Python
Python定时器线程池原理详解
Feb 26 Python
python实现数据结构中双向循环链表操作的示例
Oct 09 Python
pycharm 2020.2.4 pip install Flask 报错 Error:Non-zero exit code的问题
Dec 04 Python
用python读取xlsx文件
Dec 17 Python
使用python对excel表格处理的一些小功能
Jan 25 Python
python中xlrd模块的使用详解
Feb 01 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
如何将一个表单同时提交到两个地方处理
2006/10/09 PHP
PHP 多维数组排序(usort,uasort)
2010/06/30 PHP
php文件上传的简单实例
2013/10/19 PHP
PHP中一些可以替代正则表达式函数的字符串操作函数
2014/11/17 PHP
PHP开发框架laravel安装与配置教程
2015/03/13 PHP
对laravel的session获取与存取方法详解
2019/10/08 PHP
jquery实现居中弹出层代码
2010/08/25 Javascript
汉化英文版的Dreamweaver CS5并自动提示jquery
2010/11/25 Javascript
在jQuery 1.5中使用deferred对象的代码(翻译)
2011/03/10 Javascript
深入理解JavaScript系列(43):设计模式之状态模式详解
2015/03/04 Javascript
JS鼠标拖拽实例分析
2015/11/23 Javascript
基于JS实现新闻列表无缝向上滚动实例代码
2016/01/22 Javascript
javascript实现根据汉字获取简拼
2016/09/25 Javascript
Javascript面试经典套路reduce函数查重
2017/03/23 Javascript
Bootstrap下拉菜单更改为悬停(hover)触发的方法
2017/05/24 Javascript
详解vue表单——小白速看
2018/04/08 Javascript
python提取xml里面的链接源码详解
2019/10/15 Python
Python中求对数方法总结
2020/03/10 Python
将keras的h5模型转换为tensorflow的pb模型操作
2020/05/25 Python
Python logging模块handlers用法详解
2020/08/14 Python
基于Python的图像阈值化分割(迭代法)
2020/11/20 Python
利物浦足球俱乐部官方商店(美国):Liverpool FC US
2019/10/09 全球购物
制定岗位职责的原则
2013/11/08 职场文书
机关财务管理制度
2014/01/17 职场文书
小学毕业感言150字
2014/02/05 职场文书
企业演讲比赛主持词
2014/03/18 职场文书
《故乡》教学反思
2014/04/10 职场文书
2014年图书管理员工作总结
2014/12/01 职场文书
保留意见审计报告
2015/06/05 职场文书
幼儿园毕业致辞
2015/07/29 职场文书
2016入党积极分子心得体会
2016/01/06 职场文书
如何撰写创业策划书
2019/06/27 职场文书
销区经理年终述职报告模板
2019/11/28 职场文书
Python基础详解之描述符
2021/04/28 Python
Pygame如何使用精灵和碰撞检测
2021/11/17 Python
Android Studio实现简易进制转换计算器
2022/05/20 Java/Android