Python实现带参数的用户验证功能装饰器示例

yipeiwu_com6年前Python基础

本文实例讲述了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 opencv 实现对图像边缘扩充

python opencv 实现对图像边缘扩充

原始图像 根据图像的边界的像素值,向外扩充图片,每个方向扩充50个像素。 a = cv2.copyMakeBorder(img,50,50,50,50,cv2.BORDER_REPL...

从零学Python之入门(三)序列

sequence 序列 sequence(序列)是一组有顺序的元素的集合 (严格的说,是对象的集合,但鉴于我们还没有引入“对象”概念,暂时说元素) 序列可以包含一个或多个元素,也可以没有...

Flask项目中实现短信验证码和邮箱验证码功能

Flask项目中实现短信验证码和邮箱验证码功能

Flask是一个用Python编写的Web应用程序框架,Flask是python的web框架,最大的特征是轻便,让开发者自由灵活的兼容要开发的feature。 它由 ...

详解C++编程中一元运算符的重载

可重载的一元运算符如下: !(逻辑“非”) &(取址) ~(二进制反码) *(取消指针引用) +(一元加) -(一元求反) ++(递增) --(递减)...

详解pyenv下使用python matplotlib模块的问题解决

详解pyenv下使用python matplotlib模块的问题解决

先来描述一下我遇到的问题,在进行matplotlib学习时, plot.show() 总是无法成功运行,总是会报一个错: RuntimeError: Python is not ins...