摘要:今天同学问了我一个关于的问题,我之前也看了一下慕课七月老师讲的项目,正好碰到过,所以也给大家分享一下。之前在写项目的时候也有用到,老师讲的是代表了当前项目的,当然写完项目也没有任何问题,但是通过这次学习,我才发现,好坑呐,真怕不用就忘了。
今天同学问了我一个关于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
摘要:事件冒泡一个简单,但是坑了我无数回的知识点与的交互通过事件来实现。而浏览器的事件流是一个非常重要的概念。不去讨论那些古老的浏览器有事件捕获与事件冒泡的争议,只需要知道在中规定的事件流包括了三个部分,事件捕获阶段处于目标阶段事件冒泡阶段。 打算封装一个弹窗组件,做的时候忘记了考虑事件冒泡的因素,结果被坑得不要不要的。为了解决自己的问题,去查阅了不少资料,把事件流相关的知识都给总结一下。 ...
摘要:事件冒泡一个简单,但是坑了我无数回的知识点与的交互通过事件来实现。而浏览器的事件流是一个非常重要的概念。不去讨论那些古老的浏览器有事件捕获与事件冒泡的争议,只需要知道在中规定的事件流包括了三个部分,事件捕获阶段处于目标阶段事件冒泡阶段。 打算封装一个弹窗组件,做的时候忘记了考虑事件冒泡的因素,结果被坑得不要不要的。为了解决自己的问题,去查阅了不少资料,把事件流相关的知识都给总结一下。 ...
摘要:原因其实这个报错不需要下载最新文件,而是文件没有放到正确的位置。重启电脑后按或进入界面不同主板型号进入所需按键不同。端口映射环境下可能不存在这个问题坑在下部署了应用服务并进行了端口映射。 2018年3月6日 Docker安装 环境:windows7 安装包:DockerToolbox-17.10.0-ce.exe (下载地址:http://mirrors.aliyun.co...
阅读 966·2021-11-24 09:39
阅读 2133·2021-11-16 11:54
阅读 2032·2021-11-11 17:22
阅读 2354·2021-09-30 09:55
阅读 3560·2021-08-12 13:22
阅读 1604·2019-08-30 15:44
阅读 1152·2019-08-29 12:12
阅读 3247·2019-08-27 10:58