Python学习之路:装饰器实现终极版
Posted Py小白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python学习之路:装饰器实现终极版相关的知识,希望对你有一定的参考价值。
网站实现验证功能装饰器:
import time user,passwd=‘alex‘,‘abc123‘ def auth(func): def wrapper(*args,**kwargs): print("wraper func args:",*args,**kwargs) username=input("Username:").strip() password=input("Password:").strip() if user==username and passwd==password: print("\033[32;1mUser has passed authentication\033[0m") func(*args,**kwargs)# #print("---after authentication---")#保留要装饰函数home的输出结果 #return res else: exit("\033[31;1mInvalid username or password\033[0m") return wrapper def index(): print("welcome to index page") @auth def home(): print("welcome to home page ") return "from home" @auth def bbs(): print("welcome to bbs page") index() home() print(home())#执行结果为空,调用home相当于调用wraper bbs()
保留要装饰函数的返回结果:
import time user,passwd=‘alex‘,‘abc123‘ def auth(func): def wrapper(*args,**kwargs): print("wraper func args:",*args,**kwargs) username=input("Username:").strip() password=input("Password:").strip() if user==username and passwd==password: print("\033[32;1mUser has passed authentication\033[0m") res=func(*args,**kwargs)# print("---after authentication---")#保留要装饰函数home的输出结果 return res else: exit("\033[31;1mInvalid username or password\033[0m") return wrapper def index(): print("welcome to index page") @auth def home(): print("welcome to home page ") return "from home" @auth def bbs(): print("welcome to bbs page") index() home() print(home())#执行结果为空,调用home相当于调用wraper bbs()
不同网页不同验证方式的装饰器:
import time user,passwd=‘alex‘,‘abc123‘ def auth(auth_type): print("auth func:",auth_type) def outer_auth(func): def wrapper(*args,**kwargs): print("wraper func args:",*args,**kwargs) if auth_type=="local": username=input("Username:").strip() password=input("Password:").strip() if user==username and passwd==password: print("\033[32;1mUser has passed authentication\033[0m") res=func(*args,**kwargs)# print("---after authentication---")#保留要装饰函数home的输出结果 return res else: exit("\033[31;1mInvalid username or password\033[0m") elif auth_type=="ldap": print("搞毛线ldap,不会。。。。") return wrapper return outer_auth def index(): print("welcome to index page") @auth(auth_type="local") def home(): print("welcome to home page ") return "from home" @auth(auth_type="ldap") def bbs(): print("welcome to bbs page") index() home() print(home())#执行结果为空,调用home相当于调用wraper bbs()
以上是关于Python学习之路:装饰器实现终极版的主要内容,如果未能解决你的问题,请参考以下文章