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测试mysql写入性能完整实例
Jan 18 Python
使用Python的Django和layim实现即时通讯的方法
May 25 Python
python3.4爬虫demo
Jan 22 Python
python生成器推导式用法简单示例
Oct 08 Python
详解python statistics模块及函数用法
Oct 27 Python
python修改文件内容的3种方法详解
Nov 15 Python
Python(PyS60)实现简单语音整点报时
Nov 18 Python
python发qq消息轰炸虐狗好友思路详解(完整代码)
Feb 15 Python
python+selenium+chromedriver实现爬虫示例代码
Apr 10 Python
从0到1使用python开发一个半自动答题小程序的实现
May 12 Python
python中altair可视化库实例用法
Jan 26 Python
python中numpy数组与list相互转换实例方法
Jan 29 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.ini实现Mysql导入数据库文件最大限制的修改方法
2007/12/11 PHP
使用PHP批量生成随机用户名
2008/07/10 PHP
正则表达式判断是否存在中文和全角字符和判断包含中文字符串长度
2008/09/27 Javascript
jquery获得页面元素的坐标值实现思路及代码
2013/04/15 Javascript
关于ExtJS4.1:快捷键支持的问题
2013/04/24 Javascript
七个很有意思的PHP函数
2014/05/12 Javascript
javascript获取checkbox复选框获取选中的选项
2014/08/12 Javascript
在JavaScript中使用开平方根的sqrt()方法
2015/06/15 Javascript
如何利用AngularJS打造一款简单Web应用
2015/12/05 Javascript
js实现分割上传大文件
2016/03/09 Javascript
Node.JS文件系统解析实例详解
2017/05/15 Javascript
JS获取数组中出现次数最多及第二多元素的方法
2017/10/27 Javascript
laypage+SpringMVC实现后端分页
2019/07/27 Javascript
vue中v-for循环选中点击的元素并对该元素添加样式操作
2020/07/17 Javascript
使用vue引入maptalks地图及聚合效果的实现
2020/08/10 Javascript
vue监听浏览器原生返回按钮,进行路由转跳操作
2020/09/09 Javascript
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
python sqlobject(mysql)中文乱码解决方法
2008/11/14 Python
python读取html中指定元素生成excle文件示例
2014/04/03 Python
python smtplib模块发送SSL/TLS安全邮件实例
2015/04/08 Python
centos 安装python3.6环境并配置虚拟环境的详细教程
2018/02/22 Python
Python使用Pickle库实现读写序列操作示例
2018/06/15 Python
Python离线安装PIL 模块的方法
2019/01/08 Python
Python爬取视频(其实是一篇福利)过程解析
2019/08/01 Python
Python多线程多进程实例对比解析
2020/03/12 Python
MVMT手表官方网站:时尚又实惠的高品质手表
2016/12/04 全球购物
爱普生美国官网:Epson美国
2018/11/05 全球购物
超市实习总结自我鉴定
2013/09/19 职场文书
汽车技术服务与营销专业推荐信
2013/11/29 职场文书
青年创业培训欢迎词
2014/01/08 职场文书
节水倡议书范文
2014/04/15 职场文书
项目建议书怎么写
2014/05/15 职场文书
高中运动会广播稿
2014/09/16 职场文书
付款承诺函范文
2015/01/21 职场文书
大学生旷课检讨书1000字
2015/02/19 职场文书
日本动漫十大公认神作:第五现已全网禁播,《死亡笔记》在榜
2022/03/18 日漫