Python成神之路-------<6>

最近由于工作太忙,没有时间更新自己的成神之路,但最近在工作上也是收获满满,很累,精神上的累,总是会有细节被忽视,总是会有莫名其妙的bug出现。总而言之,痛并快乐着。今天还在为不知所以的bug苦恼,明天就解决了bug,收获的成就感不言而喻。总之,我们不是在写bug的路上,就是在解决bug的路上,希望大家每一天都在进步,希望大家在编程的路上且行且珍惜。话不多讲,今天我要说一下。有关python装饰器的内容

python装饰器

定义:本质是函数,就是为其他函数添加附加功能
原则: 1.不能修改被装饰的函数的源代码
      2.不能修改被装饰的函数的调用方式
      
实现:
    1.函数即变量
    2.高级函数
    3.函数嵌套
    4.高级函数+嵌套函数=>装饰器

直接上代码

模拟一个访问页面需要认证的功能

user,password='admin','123456'

def auth(func):
    def wrapper(*args,**kwargs):
        username = input("please input username :")
        pwd = input("please input password :")
        if username == user and pwd == password:
            print("\033[32;1mAuth success\033[0m")
            return func(*args, **kwargs)
        else:
            print("\033[31;1mAuth fail\033[0m")
    return wrapper

def index():
    print("welcome to index")

@auth
def home():
    print("welcome to home")
    return "from home"

@auth
def bbs():
    print("welcome to bbs")
    return "from bbs"

index()
print(home())
bbs()

上述已经完成了一个简单装饰器,在深入变形一次

home与bbs都是通过一个认证的地方,在工作中,我们可能需要从不同的地方认证,这就是需要,我们再次对装饰器封装

直接上代码

user,password='admin','123456'

def loginInput():
    username = input("please input username :")
    pwd = input("please input password :")
    return username,pwd

def auth(auth_type):
    print("auth_type : ",auth_type)
    def outter(func):
        def wrapper(*args, **kwargs):
            if auth_type == 'localhost':
                username, pwd = loginInput()
                if username == user and pwd == password:
                    print("\033[32;1mAuth success\033[0m")
                    return func(*args, **kwargs)
                else:
                    print("\033[31;1mAuth fail\033[0m")
            elif auth_type == 'ldap':
                print("Go To ldap ......")
                username,pwd = loginInput()
                if username == user and pwd == password:
                    print("\033[32;1mAuth success\033[0m")
                    return func(*args, **kwargs)
                else:
                    print("\033[31;1mAuth fail\033[0m")
        return wrapper
    return outter

def index():
    print("welcome to index")

@auth(auth_type='localhost')
def home():
    print("welcome to home")
    return "from home"

@auth(auth_type='ldap')
def bbs():
    print("welcome to bbs")
    return "from bbs"

index()
print(home())
bbs()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值