为啥在烧瓶中没有调用函数时会有一些打印? [复制]
Posted
技术标签:
【中文标题】为啥在烧瓶中没有调用函数时会有一些打印? [复制]【英文标题】:Why there are some print when the functin is not called in flask? [duplicate]为什么在烧瓶中没有调用函数时会有一些打印? [复制] 【发布时间】:2019-03-20 23:23:08 【问题描述】:flask中的以下代码(伪代码)让我很困惑。
def IsIllegal(f):
@wraps(f)
def decorated(*args,**kwargs):
if True:
return error msg
else:
return f(*args,**kwargs)
return decorated
@IsIllegal
@app.route(..., methods = ['POST'] )
def func1():
data = flask.request.get_data()
print(data)
...
其中函数IsIllegal用于检查用户是否未登录。我发现func1即使用户未登录也总是打印数据。func1的返回值正如预期的那样被函数停止是非法的。但我觉得它没有保存,因为 func1 中的语句被执行(打印)。我怎么能理解这个?
【问题讨论】:
你能确定你发布的是有效的Python吗?return error msg
无效。
【参考方案1】:
您注册了 未修饰 func1()
函数。 @IsIllegal()
装饰器结果是在@app.route()
装饰器注册后应用的,并且在访问路由时永远不会调用。
装饰器的应用顺序相反,可以说是从内到外。反转装饰器:
@app.route(..., methods = ['POST'] )
@IsIllegal
def func1():
现在IsIllegal(func1)
的结果被@app.route(...)
注册了,所以访问路由最终会调用decorated()
。
【讨论】:
以上是关于为啥在烧瓶中没有调用函数时会有一些打印? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
在 Python 中,为啥为没有定义超类的类调用 super() 函数不是错误? [复制]