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 相关文章推荐
pyqt4教程之实现windows窗口小示例分享
Mar 07 Python
python socket 超时设置 errno 10054
Jul 01 Python
跟老齐学Python之类的细节
Oct 13 Python
浅析Python基础-流程控制
Mar 18 Python
Python2.7下安装Scrapy框架步骤教程
Dec 22 Python
基于Python log 的正确打开方式
Apr 28 Python
django数据关系一对多、多对多模型、自关联的建立
Jul 24 Python
Python基于进程池实现多进程过程解析
Apr 30 Python
python+django+selenium搭建简易自动化测试
Aug 19 Python
怎么解决pycharm license Acti的方法
Oct 28 Python
Pycharm plot独立窗口显示的操作
Dec 11 Python
Python进程间的通信之语法学习
Apr 11 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
ThinkPHP入口文件设置及相关注意事项分析
2014/12/05 PHP
ThinkPHP 404页面的设置方法
2015/01/14 PHP
PHP7.0版本备注
2015/07/23 PHP
php+ajax无刷新分页实例详解
2015/12/07 PHP
PHP常用函数总结(180多个)
2016/12/25 PHP
Yii2.0中使用js异步删除示例
2017/03/10 PHP
PHP unset函数原理及使用方法解析
2020/08/14 PHP
Javascript 表单之间的数据传递代码
2008/12/04 Javascript
jQuery 自动增长的文本输入框实现代码
2010/04/02 Javascript
分享14个很酷的jQuery导航菜单插件
2011/04/25 Javascript
JavaScript XML和string相互转化实现代码
2011/07/04 Javascript
Android中资源文件(非代码部分)的使用概览
2012/12/18 Javascript
jQuery+css实现图片滚动效果(附源码)
2013/03/18 Javascript
微信小程序 教程之wxapp视图容器 scroll-view
2016/10/19 Javascript
JavaScript之cookie技术详解
2016/11/18 Javascript
ant design vue中表格指定格式渲染方式
2020/10/28 Javascript
Vue 解决在element中使用$notify在提示信息中换行问题
2020/11/11 Javascript
python中list循环语句用法实例
2014/11/10 Python
Python从MP3文件获取id3的方法
2015/06/15 Python
Python模拟百度登录实例详解
2016/01/20 Python
选择Python写网络爬虫的优势和理由
2019/07/07 Python
Django xadmin开启搜索功能的实现
2019/11/15 Python
Python Sphinx使用实例及问题解决
2020/01/17 Python
Python连接Hadoop数据中遇到的各种坑(汇总)
2020/04/14 Python
Django中的AutoField字段使用
2020/05/18 Python
Python selenium模块实现定位过程解析
2020/07/09 Python
利用HTML5实现使用按钮控制背景音乐开关
2015/09/21 HTML / CSS
delegate与普通函数的区别
2014/01/22 面试题
财务会计专业应届毕业生求职信
2013/10/18 职场文书
生产车间主管岗位职责
2013/12/28 职场文书
企业给企业的表扬信
2014/01/13 职场文书
学生思想表现的评语
2014/01/30 职场文书
市场营销战略计划书
2014/05/06 职场文书
法定代表人授权委托书范文
2014/09/22 职场文书
房产公证书格式
2015/01/26 职场文书
酒会开场白大全
2015/06/01 职场文书