# coding:utf8 __author__ = 'bluesli' def before(request,kwarg): print('before') def after(request,kwarg): print('after') def Filter(before_fun,after_fun): def outer(main_fun): def wrapper(request,kwarg): before_ret = before_fun(request,kwarg) if before_ret!=None: return before_ret afrer_ret = after_fun(request, kwarg) if afrer_ret != None: return afrer_ret main_ret = main_fun(request, kwarg) if afrer_ret != None: return main_ret return wrapper return outer @Filter(before,after) def index(request,kwarg): print('index') index('ll','kk')
执行过程:
4:(带参数的装饰器)装饰器本身就会将被装饰的函数作为参数传入,如果我们自己定义函数再从新作为参数时怎么辨别?: 步骤:执行filter函数2:生成outer即@outer, 最后又将被装饰函数复制成新的函数,执行新的需求; 原理就是:在装饰器的基础之上,进一步再向装饰器传参数; 复杂的装饰器很少用到,但是这是一种框架的思想,无需考虑实现的过程,只需要具体实现功能的函数;