码迷,mamicode.com
首页 > 编程语言 > 详细

Python学习之路:装饰器实现终极版

时间:2017-11-28 13:29:23      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:passwd   welcome   *args   class   com   after   div   功能   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学习之路:装饰器实现终极版

标签:passwd   welcome   *args   class   com   after   div   功能   python学习   

原文地址:http://www.cnblogs.com/xiaobai005/p/7909175.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!