妙处在于装饰器的两个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