美文网首页
Python装饰器9-函数装饰器的应用

Python装饰器9-函数装饰器的应用

作者: dnsir | 来源:发表于2019-06-15 11:51 被阅读0次

    函数装饰器应用场景-权限验证

    #! -*- coding: utf-8 -*-
    """
    使用场景1: 授权
    """
    
    from functools import wraps
    
    """
    执行每个函数之前,获取验证参数
    如果没有验证过,就调用验证函数
    如果已经验证过,则执行当前函数
    """
    
    class Req:
        def __init__(self, auth=False, user=''):
            self.auth = auth
            self.user = user
    
    def authenticate(user):
        if user != 'admin':
            return False
        return True
    
    
    def requires_auth(f):
        @wraps(f)
        def decorated(*args, **kwargs):
            auth = r.auth
            if auth:
                return f(*args, auth=True, **kwargs)
            # 也有可能不是return?
            if not authenticate(r.user):
                return f(*args, auth=False, **kwargs)
            return f(*args, auth=True, **kwargs)
    
        return decorated
    
    r = Req()
    
    @requires_auth
    def access_pic(auth=False):
        if auth:
            print('access pic succ')
        else:
            print('access pic fail')
    access_pic()
    r.user = 'admin'
    access_pic()
    
    

    执行结果:

    access pic fail
    access pic succ
    

    小结

    Python装饰器在Flask中一个典型的应用场景就是权限验证

    相关文章

      网友评论

          本文标题:Python装饰器9-函数装饰器的应用

          本文链接:https://www.haomeiwen.com/subject/afxbfctx.html