资讯专栏INFORMATION COLUMN

Flask-current_app这个坑

cc17 / 1915人阅读

摘要:今天同学问了我一个关于的问题,我之前也看了一下慕课七月老师讲的项目,正好碰到过,所以也给大家分享一下。之前在写项目的时候也有用到,老师讲的是代表了当前项目的,当然写完项目也没有任何问题,但是通过这次学习,我才发现,好坑呐,真怕不用就忘了。

今天同学问了我一个关于current_app的问题,我之前也看了一下慕课七月老师讲的flask项目,正好碰到过,所以也给大家分享一下。
【current_app】
之前在写项目的时候也有用到current_app,老师讲的是代表了当前项目的app,当然写完项目也没有任何问题,但是通过这次学习,我才发现,好坑呐,真怕不用就忘了。大家看一下下面这段代码

from flask import Flask, current_app

app = Flask(__name__)
print(app)    #输出结果:

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

from flask import Flask, current_app

app = Flask(__name__)
print(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)    #输出结果:
with app.app_context():
    app2 = current_app
    print(app2)    #输出结果:

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42953.html

相关文章

  • 又被事件冒泡了一把,这次要彻底弄懂浏览器的事件流

    摘要:事件冒泡一个简单,但是坑了我无数回的知识点与的交互通过事件来实现。而浏览器的事件流是一个非常重要的概念。不去讨论那些古老的浏览器有事件捕获与事件冒泡的争议,只需要知道在中规定的事件流包括了三个部分,事件捕获阶段处于目标阶段事件冒泡阶段。 打算封装一个弹窗组件,做的时候忘记了考虑事件冒泡的因素,结果被坑得不要不要的。为了解决自己的问题,去查阅了不少资料,把事件流相关的知识都给总结一下。 ...

    Ocean 评论0 收藏0
  • 又被事件冒泡了一把,这次要彻底弄懂浏览器的事件流

    摘要:事件冒泡一个简单,但是坑了我无数回的知识点与的交互通过事件来实现。而浏览器的事件流是一个非常重要的概念。不去讨论那些古老的浏览器有事件捕获与事件冒泡的争议,只需要知道在中规定的事件流包括了三个部分,事件捕获阶段处于目标阶段事件冒泡阶段。 打算封装一个弹窗组件,做的时候忘记了考虑事件冒泡的因素,结果被坑得不要不要的。为了解决自己的问题,去查阅了不少资料,把事件流相关的知识都给总结一下。 ...

    TIGERB 评论0 收藏0
  • Docker初体验——踩过的那些

    摘要:原因其实这个报错不需要下载最新文件,而是文件没有放到正确的位置。重启电脑后按或进入界面不同主板型号进入所需按键不同。端口映射环境下可能不存在这个问题坑在下部署了应用服务并进行了端口映射。 2018‎年‎3‎月‎6‎日 Docker安装 环境:windows7 安装包:DockerToolbox-17.10.0-ce.exe (下载地址:http://mirrors.aliyun.co...

    Jrain 评论0 收藏0
  • 快速排序填口诀

    摘要:直接默写出快速排序还是有一定难度的,所以一定要弄清楚原理再去记忆而不是去硬背。快速排序是于年提出的一种划分交换排序。 快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此在很多笔试面试中出现的几率很高。 直接默写出快速排序还是有一定难度的,所以一定要弄清楚原理再去记忆而不是去硬背。 快速排序是C.R.A....

    Ocean 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<