一周学会Flask3 Python Web开发-flask3上下文全局变量session,g和current_app

锋哥原创的Flask3  Python Web开发 Flask3视频教程:

2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili

flask3提供了session,g和current_app上下文全局变量来方便我们操作访问数据。

以下是一个表格,用于比较Flask中的session、g和current_app的相同点和不同点:

特性sessiong (全局上下文)current_app (应用上下文)
用途存储和跟踪用户特定数据在请求处理期间共享数据在应用上下文中访问应用配置和对象
存储位置默认情况下存储在客户端cookie中,但可配置为其他地方存储在应用上下文中的全局变量存储在应用上下文中的全局变量
配置可以配置会话存储方式和密钥不涉及配置,存储在应用上下文中不涉及配置,存储在应用上下文中
线程安全性
用于哪些情况用户身份验证、购物车、用户偏好设置、用户活动记录等在请求处理函数之外的地方访问请求相关的数据在应用初始化之前或应用上下文之外访问应用配置和对象
存储和获取数据的方法使用session对象的方法,如session['key']直接通过g对象的属性,如g.key使用current_app对象的属性和方法,如current_app.config['key']
生命周期可以配置会话的过期时间和持久性与请求处理期间的生命周期相同与应用的生命周期相同
示例实现用户登录和购物车功能在请求处理函数之外的地方共享数据库连接访问应用配置和对象的示例

current_app的基本概念 current_app是Flask中的一个全局变量,代表当前运行的Flask应用实例。这个全局变量的存在使得在应用程序的各个部分都能够访问应用配置和其他应用特定的对象,而不需要显式传递应用实例。

current_app的作用 current_app的主要作用是让您能够在应用程序的不同部分中访问应用实例,以便获取应用配置、数据库连接和其他应用范围的对象。它简化了在不同模块之间共享应用上下文的过程,使得代码更加模块化和可维护。

current_app的使用 要使用current_app,首先需要导入flask模块并从中引用它。以下是如何使用current_app的示例:

# 在应用上下文中使用current_app
with app.app_context():# 配置DEBUG模式app.config['DEBUG'] = True# 访问应用的配置debug_mode = current_app.config['DEBUG']print(f'DEBUG模式:{debug_mode}')

在这个示例中,我们首先创建了一个Flask应用实例,并在应用上下文中使用app.app_context()创建应用上下文,以便可以安全地访问current_app。接下来,我们调整了应用配置中的DEBUG标志,并使用current_app来访问配置值并输出到控制台。

这个示例展示了如何在应用上下文中使用current_app来访问和修改应用配置。

什么是应用上下文? 在Flask中,应用上下文是一个特定的环境,用于在请求处理期间存储和传递应用程序范围的数据。它允许在不同函数之间共享状态和数据,而不需要使用全局变量。

current_app与应用上下文的关系 current_app是应用上下文的一部分,它允许您在应用程序的任何地方访问应用实例。应用上下文的创建和销毁是由Flask自动管理的。

current_app何时可用,何时不可用? current_app只能在处于应用上下文中时才可用。它通常在请求处理期间可用,因此在视图函数中使用它是安全的。但是在应用初始化之前或应用上下文之外,使用current_app可能会导致异常。

比如,在前面的用户模块,我们就能访问到这个应用配置。

@user_bp.route('/list')
def list():# 访问应用的配置debug_mode = current_app.config['DEBUG']print(f'DEBUG模式:{debug_mode}')return '用户列表'

g对象的基本概念 在Flask中,g是一个特殊的全局变量,用于存储在请求处理期间共享的数据。它允许您在不同的请求处理函数之间共享状态和数据,而不需要使用全局变量或显式传递参数。

g对象的作用 g的主要作用是在不同的请求处理函数之间传递数据,以便在同一请求处理期间的不同函数之间共享状态。这有助

我们看一个示例:

app.py主模块里设置一个全局变量

@app.before_request
def set_name():g.username = '老六'

student.py里获取全局变量

@student_bp.route('/list')
def list():print(g.get('username'))return '学生列表'@student_bp.route('/index')
def index():print(g.get('username'))return '主页'

user.py里也获取下全局变量

@user_bp.route('/list')
def list():# 访问应用的配置print(g.get('username'))return '用户列表'

测试下,都能获取:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/896260.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

antv G6绘制流程图

效果图&#xff08;优点&#xff1a;可以自定义每一条折线的颜色&#xff0c;可以自定义节点的颜色&#xff0c;以及折线的计算样式等&#xff09;&#xff1a; 代码&#xff1a; <!-- 流程图组件 --> <template><div id"container"></div>…

DeepSeek-R1本地部署保姆级教程

一、DeepSeek-R1本地部署配置要求 &#xff08;一&#xff09;轻量级模型 ▌DeepSeek-R1-1.5B 内存容量&#xff1a;≥8GB 显卡需求&#xff1a;支持CPU推理&#xff08;无需独立GPU&#xff09; 适用场景&#xff1a;本地环境验证测试/Ollama集成调试 &#xff08;二&a…

2025-spring boot 之多数据源管理

1、是使用Spring提供的AbstractRoutingDataSource抽象类 注入多个数据源。 创建 DataSourceConfig 配置类 通过spring jdbc 提供的带路由的抽象数据源 AbstractRoutingDataSource import org.springframework.beans.factory.annotation.Autowired; import org.springframew…

keycloak - 开发环境的配置持久化

keycloak - 开发环境的配置持久化 前情提要&#xff1a; Keycloak - docker 运行 & 前端集成 本来是想顺便试一下 Okta 集成的&#xff0c;但是发现 Okta 没有本地的 docker 镜像&#xff0c;他们毕竟是做 Identity as a service……算了…… 更新后的 docker compose 如…

项目实战--网页五子棋(匹配模块)(4)

上期我们完成了游戏大厅的前端部分内容&#xff0c;今天我们实现后端部分内容 1. 维护在线用户 在用户登录成功后&#xff0c;我们可以维护好用户的websocket会话&#xff0c;把用户表示为在线状态&#xff0c;方便获取到用户的websocket会话 package org.ting.j20250110_g…

第4章 4.4 EF Core数据库迁移 Add-Migration UpDate-Database

4.4.1 数据库迁移原理 总结一下就是&#xff1a; 1. 数据库迁移命令的执行&#xff0c;其实就是生成在数据库执行的脚本代码&#xff08;两个文件&#xff1a;数字_迁移名.cs 数字_迁移名.Designer.cs&#xff09;&#xff0c;用于对数据库进行定义和修饰。 2. 数据库迁移…

Spring Boot + JSqlParser:全面解析数据隔离最佳实践

Spring Boot JSqlParser&#xff1a;全面解析数据隔离最佳实践 在构建多租户系统或需要进行数据权限控制的应用时&#xff0c;数据隔离是一个至关重要的课题。不同租户之间的数据隔离不仅能够确保数据的安全性&#xff0c;还能提高系统的灵活性和可维护性。随着业务的扩展和需…

51单片机编程学习笔记——点亮LED

大纲 器件51单片机开发板总结 安装驱动点亮LED烧录 随着最近机器人爆火&#xff0c;之前写的ROS2系列博客《Robot Operating System》也获得了更多的关注。我决定在机器人领域里再走一步&#xff0c;于是想到可以学习单片机。研究了下学习路径&#xff0c;最后还是选择先从51单…

Java String 类

Java String 类常用方法详解 在 Java 编程里&#xff0c;字符串操作十分常见&#xff0c;而 String 类作为 Java 标准库的核心类&#xff0c;用于表示不可变的字符序列。任何对字符串的修改操作都会返回一个新的字符串对象&#xff0c;不会改变原始字符串。本文将详细介绍 Str…

9.【线性代数】—— 线性相关性, 向量空间的基,维数

九 线性相关性&#xff0c; 向量空间的基&#xff0c;维数 Ax0 什么情况下无解(x不为零向量)1. 向量组的线性无关性2.向量组生成一个空间(S)3. 向量空间的一组基&#xff1a;都满足向量个数相同4. 空间维数 基向量的个数 Ax0 什么情况下无解(x不为零向量) Ax0无解&#xff0c…

蓝桥杯单片机组第十二届省赛第二批次

前言 第十二届省赛涉及知识点&#xff1a;NE555频率数据读取&#xff0c;NE555频率转换周期&#xff0c;PCF8591同时测量光敏电阻和电位器的电压、按键长短按判断。 本试题涉及模块较少&#xff0c;题目不难&#xff0c;基本上准备充分的都能完整的实现每一个功能&#xff0c;并…

opencv:距离变换 cv2.distanceTransform

函数 cv2.distanceTransform() 用于计算图像中每一个非零点像素与其最近的零点像素之间的距离&#xff08;Distance Transform&#xff0c; DT算法&#xff09;,输出的是保存每一个非零点与最近零点的距离信息&#xff1b;图像上越亮的点&#xff0c;代表了离零点的距离越远。 …

基于Spring Boot的党员学习交流平台设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

自动驾驶两个传感器之间的坐标系转换

有两种方式可以实现两个坐标系的转换。 车身坐标系下一个点p_car&#xff0c;需要转换到相机坐标系下&#xff0c;旋转矩阵R_car2Cam&#xff0c;平移矩阵T_car2Cam。点p_car在相机坐标系下记p_cam. 方法1&#xff1a;先旋转再平移 p_cam T_car2Cam * p_car T_car2Cam 需要注…

k8s ssl 漏洞修复

针对Kubernetes集群中SSL/TLS协议信息泄露漏洞&#xff08;CVE-2016-2183&#xff09;的修复&#xff0c;需重点修改涉及弱加密算法的组件配置。以下是具体修复步骤及验证方法&#xff1a; 一、漏洞修复步骤 1. 修复etcd服务 修改配置文件 &#xff1a; 编辑 /etc/kubernetes/…

数字IC后端培训教程| 芯片后端实战项目中base layer drc violation解析

今天分享一个咱们社区IC后端训练营学员遇到的一个经典DRC案例。这个DRC Violation的名字为PP.S.9(这里的PP就是Plus P)。这一层是属于管子的base layer。更多关于base layer的介绍&#xff0c;可以查看下面这份教程。 https://alidocs.dingtalk.com/api/doc/transit?spaceId5…

从零到一学习c++(基础篇--筑基期十一-类)

从零到一学习C&#xff08;基础篇&#xff09; 作者&#xff1a;羡鱼肘子 温馨提示1&#xff1a;本篇是记录我的学习经历&#xff0c;会有不少片面的认知&#xff0c;万分期待您的指正。 温馨提示2&#xff1a;本篇会尽量用更加通俗的语言介绍c的基础&#xff0c;用通俗的语言去…

DeepSeek技术全景解析:架构创新与行业差异化竞争力

一、DeepSeek技术体系的核心突破 架构设计&#xff1a;效率与性能的双重革新 Multi-head Latent Attention (MLA)&#xff1a;通过将注意力头维度与隐藏层解耦&#xff0c;实现显存占用降低30%的同时支持4096超长上下文窗口。深度优化的MoE架构&#xff1a;结合256个路由专家…

插入排序:一种简单而直观的排序算法

大家好&#xff01;今天我们来聊聊一个简单却非常经典的排序算法——插入排序&#xff08;Insertion Sort&#xff09;。在所有的排序算法中&#xff0c;插入排序是最直观的一个。 一、插入排序的基本思想 插入排序的核心思想是&#xff1a;将一个待排序的元素&#xff0c;插…

2025年校园网络招聘会汇总

1、卫生健康行业2025届毕业生春季校园网络招聘会 企业数量职位数量岗位数量10020002000 访问地址&#xff1a; https://www.weirenjob.com/zph/zph_wsjkxy2025jbyscjxywlzph/ 2、山东地区面向2025届高校毕业生网络招聘活动 企业数量职位数量岗位数量909271052434 访问地址&a…