user_list=[
{'name':"alex","pwd":''},
{'name':'tang','pwd':''},
{'name':'sb','pwd':''}
]
current_dict={'username':None,'login':False}
def auth(auth_type):
def auth_func(func):
def wrapper(*args,**kwargs):
print("认证类型", auth_type) if auth_type == 'filedb': if current_dict['username'] and current_dict['login']:#判断用户的登陆状态
res = func(*args, **kwargs)
return res
username=input("用户名").strip()#strip()函数去除字符串两边的空格
password=input('密码').strip() for item in user_list:
if username==item['name'] and password==item['pwd']:
current_dict['username']=username#改变用户的登陆状态,改变后就不需要每次都进行输入
current_dict['login']=True
res=func(*args,**kwargs)
return res
else:
print("用户名或密码错误")
elif auth_type=="ldap":
print("hahhaha") return wrapper return auth_func @auth(auth_type="filedb")#auth_func=auth(auth_type="filedb")--->@auth_func 附加了一个auth_type---->index=auth_func(index)
def index():
print("欢迎来到京东") @auth(auth_type='')
def home(name):
print("我的个人中心%s"%(name)) @auth(auth_type='filedb')
def shop_car(name):
print("%s我的购物车"%(name)) print("after---->",current_dict)
index()
print('after---->',current_dict)
home("alex")
shop_car("产品经理") # dict_user={"username":None,"login":False}
#
# def auth_func(func):
# def wrapper(*args,**kwargs):
# if dict_user['username'] and dict_user['login']:
# res = func(*args, **kwargs)
# return res
# username=input("用户名").strip()#strip()函数去除字符串两边的空格
# password=input('密码').strip()
# if username=="sb" and password=="123":
# dict_user['username']=username
# dict_user['login']=True
# res=func(*args,**kwargs)
# return res
# else:
# print("用户名或密码错误")
#
# return wrapper
#
#
#
#
#
#
# @auth_func
# def index():
# print("欢迎来到京东")
#
# @auth_func
# def home(name):
# print("我的个人中心%s"%(name))
#
# @auth_func
# def shop_car(name):
# print("%s我的购物车"%(name))
#
# index()
# home("alex")
# shop_car("产品经理")
#
# # a="123"
# b='1'
# v=b.join(a)##b join a
# print(v)

python-验证功能的装饰器示例的更多相关文章

  1. Python中利用函数装饰器实现备忘功能

    Python中利用函数装饰器实现备忘功能 这篇文章主要介绍了Python中利用函数装饰器实现备忘功能,同时还降到了利用装饰器来检查函数的递归.确保参数传递的正确,需要的朋友可以参考下   " ...

  2. python 各种装饰器示例(python3)

    参考网址: Python中的各种装饰器详解_python_脚本之家http://www.jb51.net/article/63892.htm 一.函数式装饰器: 1.装饰器无参数,被装饰对象无参数 d ...

  3. python函数式编程之装饰器(一)

    1.开放封闭原则 简单来说,就是对扩展开放,对修改封闭 在面向对象的编程方式中,经常会定义各种函数. 一个函数的使用分为定义阶段和使用阶段,一个函数定义完成以后,可能会在很多位置被调用 这意味着如果函 ...

  4. Python之迭代器、装饰器、软件开发规范

    本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 孩子,我现在有个需 ...

  5. python之闭包与装饰器

    python闭包与装饰器 闭包 在函数内部定义的函数包含对外部的作用域,而不是全局作用域名字的引用,这样的函数叫做闭包函数. 示例: #-------------------------------- ...

  6. python基础-函数之装饰器、迭代器与生成器

    1. 函数嵌套 1.1 函数嵌套调用 函数的嵌套调用:在调用一个函数的过程中,又调用了其他函数 def bar(): print("from in the bar.") def f ...

  7. python基础——8(装饰器)

    一.nonlocal关键字 def outer(): num = 0 def inner(): # 如果想在被嵌套的函数中修改外部函数变量(名字)的值 nonlocal num # 将 L 与 E(E ...

  8. Python函数编程——闭包和装饰器

    Python函数编程--闭包和装饰器 一.闭包 关于闭包,即函数定义和函数表达式位于另一个函数的函数体内(嵌套函数).而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量.参数.当其中一个 ...

  9. Python函数篇:装饰器

    装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值也是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理. ...

随机推荐

  1. cf 118B

    B. Present from Lena time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  2. java读取ldif文件并创建新的节点

    所需jar包ldap.jar. jldap-4.3-source.jar http://www.java2s.com/Code/Jar/l/Downloadldapjar.htm 浏览器输入http: ...

  3. 使用html5中required属性

    直接上代码 <form action="${pageContext.request.contextPath}/login/main.do" method="post ...

  4. 建立起BI的支撑团队

    Bobby Luo 罗如意(18907295660@189.cn) 2011年7月 http://weibo.com/cquptvlry 电子商务中的BI应用初探 系统架构 对整个数据仓库的架构进行规 ...

  5. vb语法

    If IsNull(rs(0)) = False Then picPath = rs(0) End If 判断查询数据库结果集是否为null, 如果用rs(0)则会报错,这样获取不到这条记录的null ...

  6. 如何查看yum安装的程序包都放在哪些地方了?

    yum安装, 是先下载下来, 然后安装, 用dnf代替yum后, 配置文件跟yum类似, 也是放在 /etc/dnf/ 目录下的, 也有dnf.conf 配置文件等 dnf list后面还可以跟参数: ...

  7. sublime 3 安装格式化JSON插件

    转自 https://blog.csdn.net/sweettool/article/details/72677784     一.首先下载SublimePrettyJson插件包 https://g ...

  8. 多线程threading初识,线程等待

    1.线程是程序里面最小的执行单元. 2.进程是资源的集合. 线程是包含在进程里面的,一个进程可以有多个线程,但只要要有一个线程. 一.多线程,就是N个线程一起干活: 1.传统方式,串行,循环5次需要1 ...

  9. python基础数据类型补充以及编码的进阶

    一.基本数据类型的补充循环列表改变列表大小的问题#请把列表中索引为基数的元素写出l1=[1,2,3,4,5,6]for i in l1: if i%2!=0: print(i)结果:135二:基本数据 ...

  10. LeetCode——160 Intersection of Two Linked Lists

    题目 Input: intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3 Output: ...