flask 的current_app

Flask 应用对象app具有config的属性,这些属性对于在视图或者在命令调试中访问很方便。但是现在项目的模块导入app 实例会容易出现循环导入的问题

 

Flask 通过应用情景解决了这个问题,不是直接引用一个app,而是使用current_app 代理,该代理指向处理当前活动的应用;

 

应用情景是指,在上下文中访问某些变量才有意义,在上下文外面访问无效;如在路由外访问current_app,会报runtimeError 错

 

 

在路由中使用是正常的

 

 

flask 还有应用上下文,对Flask核心对象的封装,提供了一些好用的方法,这样上下文除了核心对象还可以包含其它的数据和操作;

请求上下文是对Request请求对象的封装;

AppContext RequestContext,通过结构很方便查找到;

分别都实现了push和pop等方法;

app 和 Request() 对象只是其中的一个属性;

应用上下文,获取应用数据需要具备的环境;

请求上下文,获取请求数据需要具备的环境;

 

在测试的时候,未在路由中使用app对象会报错,但通过上下文获取就可以。即AppContext 和 RequstContext 这两个对象是通过current_app 和 request 获取的;

 

例子,管理其它的数据和操作

 

 

 

 

上下文管理器用于解决外部环境依赖

如:在视图函数里面获取请求参数,有三种方法

1、直接传递参数

  

 

 

2、通过全局变量

  缺点:多个线程同时请求程序访问这些变量时势必会互相影响,但不设置为全局变量,那在编写代码时每次都要显式滴传递这些变量也容易出错

 

3、通过上下文来管理外部参数

  

 

posted @ 2022-03-23 15:54  哩子吖  阅读(950)  评论(0)    收藏  举报