用相同的装饰器"烧瓶"路由到view_func

Ana*_*ees 3 python decorator flask python-2.7

假设我有这条路线:

app.add_url_rule('/',
                  view_func=index,
                  methods=['GET'])

app.add_url_rule('login',
                  view_func=login,
                  methods=['GET', 'POST'])

@validate_access()
def index():
    #......

@validate_access()
def login():
    #......
Run Code Online (Sandbox Code Playgroud)

我有2个端点与相同的装饰"@validate_access".当我运行这个代码时,我得到了

AssertionError: View function mapping is overwriting an existing endpoint function:    wrapperAssertionError: View function mapping is overwriting an existing endpoint function: wrapper
Run Code Online (Sandbox Code Playgroud)

我不知道它是不是一个bug.但如果有解决方案,请通知我.

谢谢 :)

Daz*_*all 17

如果你不提供endpointadd_url_rule或者route,该方法的名称将被作为终点.发生的事情是使用包装函数的名称创建规则,而不是装饰函数,可能是因为你没有使用functools.wraps

from functools import wraps
def my_decorator(f):
    @wraps(f)
    def wrapper(*args, **kwds):
        return f(*args, **kwds)
    return wrapper
Run Code Online (Sandbox Code Playgroud)