flask 装饰器 AssertionError: View function mapping is overwriting an existing endpoint function
1 问题描述
写了一个登陆认证装饰器, 部分试图,只有用户登陆才能访问
def login_wrapper(func): def inner(*args, **kwargs): """ 判断是否登陆 若是 进入视图函数 否则 重定向到登陆页面 """ if IS_LOGIN['is_login']: res = func(*args, **kwargs) return res return redirect('/login') return inner
启动项目后遇到如下报错:
AssertionError: View function mapping is overwriting an existing endpoint function: inner
2 报错重现
原来如果把函数名写重,就会导致出现该报错
但是这里视图函数名并没有问题,为什么也出现了这个问题?
查资料后得知,是 装饰器 出现了问题!
经过 装饰器 装饰之后的函数,它们的 __name__ 已经从原来的函数名变成 inner,也就是变成了装饰器内部的函数名称
我们可以通过打印函数的 __name__ 看到这一结果:
3 解决
1) 给inner._ _name_ _设置唯一值
2) 路由中给参数endpoint设置唯一值