我的编程空间,编程开发者的网络收藏夹
学习永远不晚

关于Flask上下文详细介绍

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

关于Flask上下文详细介绍

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

下载Word文档

猜你喜欢

关于java泛型的详细介绍

Java泛型泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。 比如我们要写一个排序方法,能够对整型数组、字符串数组甚至其他任何类型的数组进行排序,我们就可以使用 Ja
关于java泛型的详细介绍
2021-04-27

java中关于scanner类的详细介绍

1.Scanner的实现步骤第一步:在有效代码的第一行,通过import导入Scanner类!import java.util.Scanner;第二步:通过new关键字实例化一个Scanner对象!Scanner input = new Scanner(Sys
java中关于scanner类的详细介绍
2019-01-24

java中关于对象的详细介绍

一、对象的创建步骤:(1)声名对象变量:对象变量的声明并没有创建对象,系统只是为该改变量分配一个引用空间。(2)对象的实例化:为对象分配空间,执行new运算符后的构造方法完成对象的初始化,并返回该对象的引用。过程:1、首先为对象分配内存空间,并将成员变量进行初
java中关于对象的详细介绍
2014-08-23

java中关于散列表的详细介绍

什么是散列表散列表,也叫作哈希表(Hash Table),是一种提供键(Key)和值(Value)的映射关系的数据结构,只要给出一个Key,就可以高效查找到它所匹配的Value,时间复杂度接近于O(1)。在线学习视频推荐:java视频散列表的工作原理散列表在本
java中关于散列表的详细介绍
2014-10-05

关于java中类和对象的详细介绍

类和对象对象我们知道,代表现实世界中可以明确标识的一个实体(万物皆对象),每个对象都有自己独特的标识、状态和行为。类是具有相似特征和行为的事物的统称。使用一个通用类来定义同一类型的对象。 类是一个模板 、蓝本或者说是合约 , 用来定义对象的数据域是什么以及方法
关于java中类和对象的详细介绍
2015-06-07

java中关于工厂模式的详细介绍

工厂模式分类:1)简单工厂模式(Simple Factory)2)工厂方法模式(Factory Method)3)抽象工厂模式(Abstract Factory)相关视频教程推荐:java学习简单工厂模式简单工厂模式又称静态工厂方法模式。重命名上就可以看出这个
java中关于工厂模式的详细介绍
2017-01-12

java中有关于jar包操作的详细介绍

为什么用jar包、什么是jar包.java文件编译好后生成.class文件,如果直接写在其他程序或提供给别人使用会很不方便,因此将一些.class文件打包成一个jar包,jar包中还可以包含一些资源文件(如txt文件、html文件、css文件等等),以及一个清
java中有关于jar包操作的详细介绍
2017-08-02

关于java中的Lambda表达式的详细介绍

什么是lambda表达式?lambda表达式是一个可传递的代码块,可以在后面执行一次或多次。推荐java相关视频教程:java学习视频例如:class action implements ActionListener{@Overridepublic void
关于java中的Lambda表达式的详细介绍
2016-04-10

关于java中的常用类——String的详细介绍

概述java.lang.String 类代表字符串。Java程序中所有的字符串文字(例如"abc")都可以被看作是实现此类的实例String 中包括用于检查各个字符串的方法,比如用于比较字符串,搜索字符串,提取子字符串以及创建具有翻译为大写或小写的所有字符的字
关于java中的常用类——String的详细介绍
2014-10-10

详细介绍如何从Github上下载项目

随着开源软件的流行,Github已成为开源代码的重要平台之一。越来越多的开发者选择在Github上发布自己的代码。但是,对于一些新手来说,如何在Github上下载项目可能会是一件棘手的事情。在本文中,我们将详细介绍如何从Github上下载项
2023-10-22

关于java中变量命名规范的详细介绍

Java是一种区分字母的大小写的语言,所以我们在定义变量名的时候应该注意区分大小写的使用和一些规范,接下来我们简单的来讲讲Java语言中包、类、变量等的命名规范。(一)Package(包)的命名Package的名字应该都是由一个小写单词组成,例如com、xue
关于java中变量命名规范的详细介绍
2019-10-05

win7镜像文件下载地址的详细介绍

很多网友询问小编哪里可以下载到最安全的windows7iso镜像文件?网上搜索关于windows7iso镜像文件的资讯内容比较少,所以很多用户都不知道如何下载。今天小编给大家带来了win732以及win7 64位系统镜像文件的下载地址,大家
2023-07-16

关于java中继承类的权限问题的详细介绍

在Java中有一个比较容易忽略的问题,那就是继承类的权限与基类的权限之间的关系。因为平时在使用继承类的时候,可能很少会需要到修改基类的访问权限控制符,而是直接使用基类的访问权限控制符。如果基类有属性方法是private的,那么子类是否可以修改为protecte
关于java中继承类的权限问题的详细介绍
2019-09-11

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录