flask中的应用上下文

应用上下文:

flask将代码执行分为了两种状态:1、Flask请求被实例化后到第一个请求到来之前(此时应该是应用上下文);2、第一个请求到来之后(此时应该是请求上下文)。

flask会有多个应用,然而为每个应用都创建一个请求上下文的话,代价是比较大的,所以,flask引入了应用上下文的概念。flask中存在多个应用,如何找到“正确地”的应用,解决方案是current_app代理对象。

应用上下文就是对应于第一种状态。在第一种状态中,你可以做的事情有:

1、程序员可以安全地修改应用对象;

2、目前还没有处理任何请求

3、你必须的有一个指向应用对象的引用(应该是current_app)来修改它。不会有某个神奇的代理变量指向你刚创建的或者正在修改的应用对象的。

可以隐式地创建应用上下文(当创建创建请求上下文时,没有此时应用没有上下文,那么自动创建应用上下文),这种方式程序员不用管。

可以显式地调用app_context()方法来创建应用上下文:

from flask import Flask,current_app

app=Flask(__name__)

with app.app_context():

    #此时,current_app已经指向了app

    print current_app.name


应用上下文会在必要时被创建和销毁。它不会在线程间移动,并且也不会在不同的请求之间共享。正因为如此,它是一个存储数据库连接信息或是别的东西的最佳位置。内部的栈对象叫做flask._app_ctx_stack。扩展可以在最顶层自由地存储额外信息,想象一下它们用一个充分独特的名字在那里存储信息,而不是在flask.g对象里,flask.g是留给用户的代码用的。

更详细的内容可参考应用上下文:http://docs.jinkan.org/docs/flask/appcontext.html#app-context

flask上下文机制:https://blog.tonyseek.com/post/the-context-mechanism-of-flask/#id15


转载于:https://my.oschina.net/935572630/blog/372310

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值