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删除nginx缓存文件示例(python文件操作)
Mar 26 Python
python数据结构树和二叉树简介
Apr 29 Python
python简单实现旋转图片的方法
May 30 Python
Python黑帽编程 3.4 跨越VLAN详解
Sep 28 Python
Python使用zip合并相邻列表项的方法示例
Mar 17 Python
基于python实现学生管理系统
Oct 17 Python
Django框架实现的分页demo示例
May 25 Python
python 利用pyttsx3文字转语音过程详解
Sep 25 Python
TensorFlow实现批量归一化操作的示例
Apr 22 Python
如何基于matlab相机标定导出xml文件
Nov 02 Python
python切片作为占位符使用实例讲解
Feb 17 Python
python中的被动信息搜集
Apr 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用GD库生成高质量的缩略图片
2011/03/09 PHP
thinkphp备份数据库的方法分享
2015/01/04 PHP
jquery1.10给新增元素绑定事件的方法
2014/03/06 Javascript
javascript中数组方法汇总
2015/07/07 Javascript
javascript实现3D变换的立体圆圈实例
2015/08/06 Javascript
avalon js实现仿google plus图片多张拖动排序附源码下载
2015/09/24 Javascript
js中substring和substr两者区别和使用方法
2015/11/09 Javascript
利用JQuery写一个简单的异步分页插件
2016/03/07 Javascript
浅谈JS继承_寄生式继承 & 寄生组合式继承
2016/08/16 Javascript
预防网页挂马的方法总结
2016/11/03 Javascript
浅谈js数组和splice的用法
2016/12/04 Javascript
简单实现JS倒计时效果
2016/12/23 Javascript
JavaScript数据结构之二叉查找树的定义与表示方法
2017/04/12 Javascript
详解React Native顶|底部导航使用小技巧
2017/09/14 Javascript
babel的使用及安装配置教程
2018/02/22 Javascript
原生nodejs使用websocket代码分享
2018/04/07 NodeJs
element-ui 关于获取select 的label值方法
2018/08/24 Javascript
element ui table 增加筛选的方法示例
2018/11/02 Javascript
详解Vue中组件传值的多重实现方式
2019/08/16 Javascript
Vue项目实现换肤功能的一种方案分析
2019/08/28 Javascript
[02:08:58]2014 DOTA2国际邀请赛中国区预选赛 Ne VS CIS
2014/05/22 DOTA
[41:20]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS DK
2014/05/26 DOTA
Python简单操作sqlite3的方法示例
2017/03/22 Python
Python 12306抢火车票脚本 Python京东抢手机脚本
2018/02/06 Python
浅析python中的迭代与迭代对象
2018/10/08 Python
django2.2 和 PyMySQL版本兼容问题
2020/02/17 Python
HTML中fieldset标签概述及使用方法
2013/02/01 HTML / CSS
哥伦比亚最大的网上商店:Linio哥伦比亚
2016/09/25 全球购物
德国家具购物网站:Möbel Höffner
2019/08/26 全球购物
公司前台辞职报告
2014/01/19 职场文书
财务出纳岗位职责
2014/02/03 职场文书
客户接待方案
2014/02/26 职场文书
电子专业求职信
2014/06/19 职场文书
全国爱眼日活动总结
2015/02/27 职场文书
通过Qt连接OpenGauss数据库的详细教程
2021/06/23 PostgreSQL