iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >关于Flask上下文详细介绍
  • 786
分享到

关于Flask上下文详细介绍

2024-04-02 19:04:59 786人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录1、上下文概念2、flask中的上下文2.1请求上下文2.2应用上下文 1、上下文概念 上下文,说白了就是所谓的语境,就是语言环境。比如单独拎出来一篇文章的某一句话,我们可能不能

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 上下文内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 关于Flask上下文详细介绍

本文链接: https://www.lsjlt.com/news/158453.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 关于Flask上下文详细介绍
    目录1、上下文概念2、Flask中的上下文2.1请求上下文2.2应用上下文 1、上下文概念 上下文,说白了就是所谓的语境,就是语言环境。比如单独拎出来一篇文章的某一句话,我们可能不能...
    99+
    2024-04-02
  • 关于Flask视图介绍
    目录2、类视图2.1 标准类视图2.1.1 基于方法的视图1、视图函数 之前的文章说过,在 Flask 中路由是请求的 url 与处理函数之间的映射,使用app.route装饰器将处...
    99+
    2024-04-02
  • 关于redis命令的详细介绍
    小编给大家分享一下关于redis命令的详细介绍,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!              &...
    99+
    2024-04-02
  • 关于Redis数据库入门详细介绍
    目录1、Redis是什么?2、Redis特点:单线程为何如此快?3、redis 对比 memcached4、redis 典型应用场景:5、Redis下载与安装:Redis服务...
    99+
    2024-04-02
  • 关于pyqt5弹出提示框的详细介绍
    目录前言1.软件关闭弹框2.信息提示框3.错误提示框4.警告提示框5.关于弹窗附:Python-PyQt5错误提示弹框总结前言 最近在用pyqt5设计软件时,想到了一些关于提示框的操...
    99+
    2024-04-02
  • Dockerfile文件详细介绍
    目录一. dockerfile的介绍1.1 关于dockerfile1.2 dockerfile文件的组成部分1.3 dockerfile的执行二. docker bulid 命令的...
    99+
    2023-05-15
    Dockerfile文件详解 Dockerfile文件
  • 详细介绍如何从Github上下载项目
    随着开源软件的流行,Github已成为开源代码的重要平台之一。越来越多的开发者选择在Github上发布自己的代码。但是,对于一些新手来说,如何在Github上下载项目可能会是一件棘手的事情。在本文中,我们将详细介绍如何从Github上下载项...
    99+
    2023-10-22
  • Pythonwheel文件详细介绍
    目录1. wheel介绍2. wheel的类型3. 创建wheel4. 导入使用wheel1. wheel介绍 .whl文件(WHL file)也称为轮子(wheel),这是用于py...
    99+
    2024-04-02
  • Java关于List集合去重方案详细介绍
    1 常规去重 碰到List去重的问题,除了遍历去重,我们常常想到利用Set集合不允许重复元素的特点,通过List和Set互转,来去掉重复元素。 // 遍历后判断赋给另一个List...
    99+
    2024-04-02
  • 关于Redis的详细简介
    这篇文章主要介绍关于Redis的详细简介,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Redis的高并发和快速原因1.redis是基于内存的,内存的读写速度非常快;2.redis是单...
    99+
    2024-04-02
  • Java中关于Collections集合工具类的详细介绍
    Collections 是一个操作 Set、List 和 Map 等集合的工具类。 Collections 中提供了一系列静态的方法对集合元素进行排序、查询和修改等操作,还提供了对集...
    99+
    2024-04-02
  • Flask的上下文管理详解
    本篇内容介绍了“Flask的上下文管理详解”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Flask线程间上下文安全Falsk完成线程安全的原...
    99+
    2023-06-02
  • Java关键字null的详细介绍
    本篇内容主要讲解“Java关键字null的详细介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java关键字null的详细介绍”吧!一、null是代表不确定的对象Java中,null是一个关键...
    99+
    2023-06-17
  • win7镜像文件下载地址的详细介绍
    很多网友询问小编哪里可以下载到最安全的windows7iso镜像文件?网上搜索关于windows7iso镜像文件的资讯内容比较少,所以很多用户都不知道如何下载。今天小编给大家带来了win732以及win7 64位系统镜像文件的下载地址,大家...
    99+
    2023-07-16
  • Flask模板渲染与Get和Post请求详细介绍
    目录模板渲染GET和POST请求模板渲染 所谓模板渲染就是让flask渲染一个html文档,比如你有一个html文件,想要在网站上加载出来,你就要渲染它。 首先把这个文件,叫做模板渲...
    99+
    2024-04-02
  • 详细介绍windows下MySQL安装教程
    目录1、下载前需要了解的一些概念2、选择自己需要的版本3、连接MySQL服务前言: 大家好,我是小诚,这段时间在网上进行了一些面试,发现无论什么公司,数据库的面试题都是不可避免的,...
    99+
    2024-04-02
  • linux下磁盘分区的详细介绍
    这篇文章主要讲解了“linux下磁盘分区的详细介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux下磁盘分区的详细介绍”吧!Centos下磁盘管理   ...
    99+
    2023-06-13
  • CentOS8详细安装教程--图文介绍超详细
    CentOS8详细安装教程--图文介绍超详细 目录 VMware介绍 CentOS介绍 一、下载 镜像地址:Download 这里选择阿里镜像  二、开始安装Centos8 1.【文件】----->【新建虚拟机】(快捷键:Ctrl+N) 2...
    99+
    2023-09-01
    linux 运维 服务器 centos windows
  • Spring配置文件的详细介绍
    目录 1. Spring的配置文件的命名 2. Spring配置文件中有什么 3. set注入 4. 构造注入 1. Spring的配置文件的命名 答:Spring的配置文件是放在resources文件夹下面的,一般我们都会给他起一个...
    99+
    2023-09-18
    spring set注入 构造注入 bean标签 java
  • djangosettings.py配置文件的详细介绍
    配置文件如下,下面对配置文件进行一一解释 """ Django settings for film1_manager project. Generated by 'django-a...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作