欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python装饰器原理

程序员文章站 2022-07-14 09:54:06
...

妙处在于装饰器的两个return

1.装饰器

# 使用闭包
def wrap(fun):
    def check():
        print("正在检查用户权限!")
        fun()
    return check

 2.实现

@wrap
def fun():
    print("执行这条语句需要时间!")

 3.原理

使用装饰器相当于执行了下面几项操作:
fun = wrap(fun) # wrap()的返回值check被fun引用,同时fun被check中引用。
fun() # 最终执行的是check,然后再check里面执行了原先fun放内容。

 4.实例

def require_login(func):
    """
    需要登录
    session中检查是否存在已登录的用户
    """

    def wrapper(request, *args, **kv):
        login_user = request.session.get(constants.SESSION_LOGIN_USER)
        # 访问的路径
        # 没有登录,则跳转到
        if login_user is None:
            return unauthorized_response(request.is_ajax(),None)
        return func(request, *args, **kv)

    return wrapper

 

from **.decorators import require_login
@require_login
def order_mng(request):
    pass