flask 的 before_request 如何拦截所有 url,不同蓝图下面的 url

2019-06-03 17:12:13 +08:00
 K1W1
看教程都是 @app.before_request,而 app 是一个蓝图,我分了模块,有好几个模块,比如 admin、user、auth、api。我需要每个里面都要写 @xxx.before_request 才生效。如何统一拦截所有的 url
2926 次点击
所在节点    Python
6 条回复
i36lib
2019-06-03 18:01:47 +08:00
app 也可以是 flask app 实例:

def create_app():
app = Flask(__name__)

@app.before_request
def before_request_hook():
pass # do something

return app
K1W1
2019-06-03 18:34:31 +08:00
@i36lib 谢谢,找到原因了,app 的确是可以全局拦的,但是目前我只有放在入口的文件里面才拦截成功,别的文件导入 app 再加上 @app.before_requet 不生效,不清楚原因
rocketman13
2019-06-04 11:30:47 +08:00
既然统一拦截所有的 url,那么所有 before_requet 函数都放在入口文件使用就可以了,为什么还要分放在蓝图子目录?
K1W1
2019-06-04 13:07:49 +08:00
@rocketman13 不是分放,我建了一个文件,导入了 app,然后使用 @app.before_request 发现,没有拦截蓝图下面的链接。然后发现在入口文件里面的 @app.before_request 才能全局拦截
bnbdfg
2019-06-04 14:34:33 +08:00
这个问题我之前也遇到过,没有解决
rooode
2021-03-16 14:50:05 +08:00
解决办法:
其他 py 文件的 Blueprint(None,__name__) 注意第一个参数

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/570424

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX