Python基础-----带参数验证功能的装饰器

#带参数,可以根据不同的认证类型进行认证

user_list = [         {‘name‘:‘a‘,‘password‘:‘123‘},         {‘name‘:‘b‘,‘password‘:‘123‘},         {‘name‘:‘c‘,‘password‘:‘123‘},         {‘name‘:‘d‘,‘password‘:‘123‘}]   #所有用户信息列表(值为字符串类型)

current_user = {‘username‘:None,‘login‘:False}    #记录用户当前登录状态

def auth(auth_type = ‘filedb‘):   #最外层闭包函数传入验证类型auth_type   def auth_func(func):      def wrapper(*args,**kwargs):         print(‘认证类型是:‘,auth_type)         if auth_type == ‘filedb‘:   #用阿里判断是何种认证类型            if current_user[‘username‘] and current_user[‘login‘]:   #如果已经登录,则无需登陆               res = func(*args,**kwargs)               return res            username = input(‘用户名:‘).strip()   #上面if不成立,则登录            password = input(‘密码:‘).strip()            for user_dic in user_list:    #for遍历的是用户列表的中用户信息字典               if username == user_dic[‘name‘] and password == user_dic[‘password‘]: #登录验证                  current_user[‘username‘] = username   #登录成功,更改用户状态                  current_user[‘login‘] = True                  res = func(*args,**kwargs)                  return res            else:   #该处else没放在if下是因为,要遍历所有的用户列表才能判断是否真的有错               print(‘用户名或密码错误,请重新登录!‘)         elif auth_type == ‘ladb‘:            print(‘认证类型是:‘,auth_type)            res = func(*args,**kwargs)            return res      return wrapper   return auth_func

@auth(auth_type = ‘filedb‘)    #auth_func = auth(auth_type = ‘filedb‘)  -->  @auth_func,给他附加了参数def home(name):   print(‘欢迎 %s 来到主页‘%name)

@auth(auth_type = ‘ladb‘)def shopping_car(name):   print(‘%s 的购物车里有:学习用品,生活用品!‘%name)

home(‘Jerry‘)print(current_user)shopping_car(‘Jerry‘)

原文地址:https://www.cnblogs.com/Meanwey/p/9741287.html

时间: 2024-10-05 17:22:45

Python基础-----带参数验证功能的装饰器的相关文章

python基础 带参数以及返回值的函数装饰器

1 #带参数以及返回值的函数装饰器,上一篇博客记录了无参数函数装饰器写法以及使用方案,当函数有参数以及返回值时需要将装饰器进行如下修稿 2 def timer(fun): 3 def deco(*args,**kwargs): #被装饰函数实际是执行deco,所以在此将被装饰函数参数进行传递 4 start_time = time.time() 5 res = fun(*args,**kwargs) #将被装饰函数的返回值接收 6 stop_time = time.time() 7 return

python基础-第五篇-5.3装饰器

小白发呆的看着窗外,同事们陆陆续续的地来到公司,想起算法,小白就飘飘然了.突然后面传来一声呼唤,原来是小刘! 小刘:不好意思啊!堵车了,就来晚了点,不耽误你的时间,咱们就开启的今天的培训内容吧! 小白连忙说:没事,可以开始啦! 函数内存与执行函数 小刘:那我给你看一段代码,你看看会得到什么结果 def f1(): return 'F1' x = f1() print(x) x2 = f1 print(x2) 小白看了看,很快说出了x的输出值为‘F1’,但是看到x2这里,小白就有点想不通,小白就执

Python 基础 - Day 4 Learning Note - Decorator 装饰器

装饰器的知识准备 函数,函数参数 作用域: 全局变量,局部变量 变量解析规则:LEGB法则 - 假设嵌套函数(第二层函数),解析器查找内部函数的变量的顺序如下. 在任何一层先找到了符合要求的变量,则不再向外查找.如果没有,则抛出N Local - 本地函数内部,通过任何方式赋值的,而且没有被global关键字声明为全局变量的变量 Enclosing - 直接该内部函数的外围空间(即它的上层函数)的本地作用域.多层嵌套,则有内而外逐层查找,直至最外层的函数 Global - 全局空间(模块encl

Python 基础第十一天(闭包和装饰器初识)

今日内容: 函数名的应用 闭包 装饰器的初识 装饰器的传参 1.函数名的应用 函数名是函数的名字. 本质:变量,特殊的变量.是函数的内存地址 函数名() 可以执行此函数 (1)单独打印函数名,可以得到函数的内存地址: print(func1)  # <function func1 at 0x0000000000872378> (2)函数名可以赋值 例: def func2():print(666)#f = func2print(f()) (3)函数名可以作为容器类数据的元素. 例: def f

python登录加随机验证码校验程序(装饰器内置函数的理解)

使用说明:为了防止恶意攻击,同时不对原先用户登录验证的方法代码进行改动,在检验账号密码方法外再套一层校验方法(验证码),过滤非人为的攻击. 代码如下: #!/usr/bin/env python # -*- coding:utf-8 -*- import os import json import random ###取得绝对路径下的账号密码文件 BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__))) filepa

python基础(三)闭包与装饰器

闭包(closure): 内嵌函数通过调用外部嵌套函数作用域内的变量,则这个内嵌函数就是闭包. 闭包必须满足三个条件: 必须有一个内嵌函数 内嵌函数必须引用外部嵌套函数中的变量 外部函数的返回值必须是内嵌函数 eg: def make_power(y): def fn(x): return x ** y return fn pow = make_power(2) print pow(5) #25 #声明pow时返回了函数fn并将2作为嵌套函数的参数传入 #闭包内嵌套函数传递参数时,参数保留 装饰

python生成带参数二维码

#coding:utf8 import urllib2 import urllib import json import string import random class WebChat(object): def __init__(self, appid=None, secret=None, code=None): self.appid = appid self.secret = secret self.code = code def token_url(self): return "htt

Python全栈开发之8、装饰器详解

一文让你彻底明白Python装饰器原理,从此面试工作再也不怕了. 一.装饰器 装饰器可以使函数执行前和执行后分别执行其他的附加功能,这种在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator),装饰器的功能非常强大,但是理解起来有些困难,因此我尽量用最简单的例子一步步的说明这个原理. 1.不带参数的装饰器 假设我定义了一个函数f,想要在不改变原来函数定义的情况下,在函数运行前打印出start,函数运行后打印出end,要实现这样一个功能该怎么实现?看下面如何用一个简单的装饰器来实现

13、python中的函数(闭包与装饰器)

一.嵌套函数 函数的内部又再定义另一个函数,这个函数就叫嵌套函数,里面含函数就叫内部函数. 示例: 二.返回函数 函数可以接收函数对象作为参数,同理函数也能返回一个函数对象作为返回值. 示例: 返回函数可以用来延迟函数的执行. 三.命名空间与变量作用域 变量作用域指的是变量的存活的范围.命名空间指的是属于一个对象的所有属性(对象)的集合. 示例: A的命名空间是A函数对象里面的所有对象的集合,包括变量a.函数B.变量b:B的命名空间就是属于函数B的所有对象的集合,包括变量b: a的变量作用域就是