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

yipeiwu_com5年前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将list转为matrix的方法

如下所示: import numpy as np tmp = [[1,2,3],[4,5,6],[7,8,9]]; np.matrix(tmp) 以上这篇python将list转...

解决在Python编辑器pycharm中程序run正常debug错误的问题

解决在Python编辑器pycharm中程序run正常debug错误的问题

初学Python,写了一小段程序,在pycharm中debug一直报错,在网上搜了很久,尝试多种方法后还是没有用。 尝试了很久之后,发现这个问题是由于: 1、程序中有中文注释。 2、程...

django获取from表单multiple-select的value和id的方法

如下所示: <select id="host_list" name="host_list" multiple> {% for op in host_list %}...

windows下Anaconda的安装与配置正解(Anaconda入门教程) 原创

windows下Anaconda的安装与配置正解(Anaconda入门教程) 原创

一、下载anaconda 第一步当然是下载anaconda了,官方网站的下载需要用迅雷才能快点,或者直接到清华大学镜像站下载。当然这里推荐【听图阁-专注于Python设计】下载,下载地址...

pygame学习笔记(2):画点的三种方法和动画实例

pygame学习笔记(2):画点的三种方法和动画实例

1、单个像素(画点) 利用pygame画点主要有三种方法: 方法一:画长宽为1个像素的正方形 复制代码 代码如下: import pygame,sys pygame.init() scr...