flask之current_app的使用及详解

编程入门 行业动态 更新时间:2024-10-26 16:30:23

【current_app】
之前在写项目的时候也有用到current_app,大牛讲的是代表了当前项目的app,当然写完项目也没有任何问题。

from flask import Flask, current_app

app = Flask(__name__)
print(app)    #输出结果:<Flask '1_current_app'>

相信大家对这段代码是没有问题的,也不知道有啥作用,那么请看下面这段代码

from flask import Flask, current_app

app = Flask(__name__)
print(app)    #输出结果:<Flask '1_current_app'>
app2 = current_app
print(app2)    #输出结果:竟然报了一大堆的错误

错误信息是这样子的:RuntimeError: Working outside of application context.意思是说我们在应用上下文之外运行的,这究竟是咋回事,请看下面这幅图


原来在flask内部维护者两个线程隔离的栈,current_app指向了AppContext(应用上下文)中的栈顶,request指向了RequestContext(请求上下文)栈顶,当请求进入的时候,Request对象被压入栈,从而request有了指向处理请求,接下来会判断AppContext栈顶是否为空,若为空则向栈中压入一个AppContext对象,即app,从而current_app就有了指向,所以我们在项目中使用是没有报错的,而我们上面的代码不是在请求中实现的所以AppContext栈顶为空,current_app并没有指向一个AppContext对象,怎样解决呢?

上面不如下面代码美观

from flask import Flask, current_app

app = Flask(__name__)
print(app)    #输出结果:<Flask '1_current_app'>
with app.app_context():
    app2 = current_app
    print(app2)    #输出结果:<Flask '1_current_app'>

这里我们使用了with,其app_context()返回一个AppContext对象,而其又实现了__enter__与__exit__分别让AppContext对象,即app入栈和出栈,完成了此操作。

 

更多推荐

flask之current_app的使用及详解

本文发布于:2023-06-14 01:17:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1422021.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:详解   flask   current_app

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!