关于Flask 上下文详细介绍

 更新时间:2021年11月26日 08:54:35   作者:tigeriaf  
这篇文章主要给大家分享了关于Flask 上下文详细介绍,我们可以把上下文理解为当前环境的快照,是一个用来保存状态的对象。在代码执行的某个时刻,根据上下文的代码逻辑,可以决定在当前时刻下使用到的环境变量等。下面一起进入文章了解详情内容,需要的朋友也可以参考一下

1、上下文概念

上下文,说白了就是所谓的语境,就是语言环境。比如单独拎出来一篇文章的某一句话,我们可能不能理解它的意思,但是通过这句话所处的语言环境,再结合它前后的语句,就能很轻易的理解。

我们可以把上下文理解为当前环境的快照,是一个用来保存状态的对象。在代码执行的某个时刻,根据上下文的代码逻辑,可以决定在当前时刻下使用到的环境变量等。

2、Flask中的上下文

Flask 中有两种上下文,应用上下文(application context)和请求上下文(request context):

  • application:指的是调用app = Flask(__name__)创建的 Flask 对象
  • request:指的是每次 HTTP 请求发生时,在 Flask 对象内部创建的 Request 对象

2.1请求上下文

Flask中处理请求时,应用会生成“请求上下文”对象,保存当前请求的相关数据信息,整个请求的处理过程,都会在这个上下文对象中进行,保证请求的处理过程独立不受干扰。

请求上下文对象有:requestsession,下面以request为例具体讲解。

在上篇文章Flask  请求钩子的实现 我们说过,在 Flask 中有四种常用的请求钩子,分别是:before_first_requestbefore_requestafter_requestteardown_request

@app.before_first_request

def before_first_request():

    print(request.url)

    print('before_first_request')

@app.before_request

def before_request():

    print(request.url)

    print('before_request')





@app.after_request

def after_request(response):

    print(request.url)

    print('after_request')

    return response

@app.teardown_request

def teardown_request(e):

    print(request.url)

    print('teardown_request')

@app.route('/test')

def test():

    print(request.url)

    return 'test'

通过请求我们发现,在每个请求钩子装饰的处理函数中,我们都可以直接访问 request 对象。而且,在其他普通函数内,无法访问 request 对象,说明 request 对象并不是真正的全局变量,只是在请求上下文的生命周期内可以访问,离开了请求的生命周期,就无法访问了。上面的请求钩子装饰的处理函数,在请求处理的不同阶段执行,自然其内部也可以访问 request 对象。

2.2应用上下文

上面说请求上下文是和请求相关,请求上下文对象保存的是请求的相关数据信息,下面说一下应用上下文,所谓应用上下文,就是和当前应用相关的,应用上下文对象是包含当前应用相关的信息。

应用上下文对象有:current_appg

我们了解到,每个请求,都有一个 request 对象和视图函数对应,可以理解为当前请求(current request), 而程序也会有多个实例的情况,为了能获取对应的程序实例,而不是固定的某一个程序实例,我们就需要使用 current_app变量。

from flask import Flask, current_app

app = Flask("tigeriaf_app")

@app.route('/')

def index():

    return 'Hello, {}!'.format(current_app.name)

current_app是一个本地代理,它的类型是werkzeug.local.LocalProxy,它所代理的即是app对象,也就是说current_app == LocalProxy(app)。所以通过current_app.name可以获取当前应用的名称,也就是tigeriaf_app,使用current_app是因为它也是一个ThreadLocal变量,对它的改动不会影响到其他线程。我们可以通过current_app._get_current_object()方法来获取app对象。也可以在current_app中存储一些自定义的变量。

current_app只在请求线程内存在,它的生命周期就是在应用上下文里。离开了应用上下文,current_app一样无法使用。

g对象是 Flask 程序全局的一个临时变量,充当中间媒介的作用。我们可以通过它传递一些数据,g保存的是当前请求的全局变量,每次请求都会重设这个值,我们通常会使用它结合请求钩子来保存每个请求处理前所需要的全局变量,比如当前登入的用户对象,数据库连接等。 比如,使用g对象保存请求的 token,在视图函数中就可以直接使用g.name获取对应的值了。

from flask import g

@app.before_request

def get_token():

    g.name = request.headers.get("token")

到此这篇关于 关于Flask 上下文详细介绍的文章就介绍到这了,更多相关Flask 上下文内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python读取mp3中ID3信息的方法

    Python读取mp3中ID3信息的方法

    这篇文章主要介绍了Python读取mp3中ID3信息的方法,实例分析了Python中mutagen包的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • python对象与json相互转换的方法

    python对象与json相互转换的方法

    这篇文章主要介绍了python对象与json相互转换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • python用selenium打开浏览器后秒关闭浏览器的解决办法

    python用selenium打开浏览器后秒关闭浏览器的解决办法

    最近朋友在学Selenium的时候遇到一个问题,当执行完selenium程序后,浏览器会闪退也就是自动关闭,这篇文章主要给大家介绍了关于python用selenium打开浏览器后秒关闭浏览器的解决办法,需要的朋友可以参考下
    2023-07-07
  • Pytorch上下采样函数--interpolate用法

    Pytorch上下采样函数--interpolate用法

    这篇文章主要介绍了Pytorch上下采样函数--interpolate用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • python将控制台输出保存至文件的方法

    python将控制台输出保存至文件的方法

    今天小编就为大家分享一篇python将控制台输出保存至文件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • python实现五子棋游戏

    python实现五子棋游戏

    这篇文章主要为大家详细介绍了python实现五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • Python+OpenCV读写视频的方法详解

    Python+OpenCV读写视频的方法详解

    这篇文章主要为大家详细介绍了Python+OpenCV进行读写视频操作的示例代码,文中的示例代码讲解详细,感兴趣的小伙伴可以动手尝试一下
    2022-08-08
  • python中的sys模块和os模块

    python中的sys模块和os模块

    这篇文章主要介绍了python中的sys模块和os模块,sys模块提供对解释器使用或维护的一些变量的访问,以及与解释器强烈交互的函数,os模块提供了多数操作系统的功能接口函数,下文更多相关内容需要的小伙伴可以参考一下
    2022-03-03
  • Python、 Pycharm、Django安装详细教程(图文)

    Python、 Pycharm、Django安装详细教程(图文)

    这篇文章主要介绍了Python、 Pycharm、Django安装详细教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • python 实现对文件夹中的图像连续重命名方法

    python 实现对文件夹中的图像连续重命名方法

    今天小编就为大家分享一篇python 实现对文件夹中的图像连续重命名方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10

最新评论