在使用 web 框架的时候,我们每个路由上都有个 @xxx
的函数。
这个函数就是装饰器。
那么装饰器有啥作用呢?
装饰器可以对函数进行一些预处理, 比如做一些缓存,做路由啊,做权限啊,等等都可以。
没有装饰器的时候我们代码是怎么写的?
def some_route(arg1):
u = get_user(arg1)
check_perm(u)
return 'some thing'
def some_route1(arg1):
u = get_user(arg1)
check_perm(u)
return 'some thing'
有了装饰器代码变简洁了
def check_perm(func):
def _check_perm(arg1):
u = get_user(arg1)
my_check_perm(u)
return func(arg1)
return _check_perm
@check_perm
def some_route(arg1):
return 'some thing'
@check_perm
def some_route1(arg1):
return 'some thing'
修饰器是怎么执行的呢?
我们换种写法
def check_perm(func):
def _check_perm(arg1):
u = get_user(arg1)
my_check_perm(u)
return func(arg1)
return _check_perm
def _some_route(arg1):
return 'some thing'
some_route = check_perm(_some_route)
def _some_route1(arg1):
return 'some thing'
some_route = check_perm(_some_route1)
这个就是修饰器的基本原理。
写到这里,今天修饰器的介绍也基本完成了。
大家,发挥自己的想象力,使用愉快
网友评论