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

news/2025/2/25 8:23:14/

锋哥原创的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.ppmy.cn/news/1574806.html

相关文章

大语言模型(LLM)微调技术笔记

图1:大模型进化树2 大模型微调 在预训练后,大模型可以获得解决各种任务的通用能力。然而,越来越多的研究表明,大语言模型的能力可以根据特定目标进一步调整。 这就是微调技术,目前主要有两种微调大模型的方法1&…

【LeetCode 热题100】48. 旋转图像以及旋转任意角度的算法思路及python代码

48. 旋转图像 给定一个 n n n n nn 的二维矩阵 m a t r i x matrix matrix 表示一个图像。请你将图像顺时针旋转 90 90 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1: 输入&…

微信小程序 - 页面跳转(wx.navigateTo、wx.redirectTo、wx.switchTab、wx.reLaunch)

API 跳转 1、wx.navigateTo (1)基本介绍 功能:保留当前页面,跳转到应用内的某个页面,使用该方法跳转后可以通过返回按钮返回到原页面 使用场景:适用于需要保留当前页面状态,后续还需返回的情…

首次使用WordPress建站的经验分享(一)

之前用过几种内容管理系统(CMS),如:dedeCMS、phpCMS、aspCMS,主要是为了前端独立建站,达到预期的效果,还是需要一定的代码基础的,至少要有HTML、Css、Jquery基础。 据说WordPress 是全球最流行的内容管理系统CMS,从现在开始记录一下使用WordPress 独立建站的步骤 选购…

新手小白学习docker第十弹-------Docker微服务实战

目录 0 引言1 IDEA创建微服务1.1 IDEA配置maven3.91.2 新建项目docker_serve1.3 编写docker_serve代码1.4 启动项目1.5 打包项目1.6 上传项目到虚拟机 2 部署到docker容器2.1 编写Dockerfile2.2 构建镜像2.3 运行容器2.4 访问测试 3 后记 0 引言 真的,这个看着就好…

计算机视觉基础|轻量化网络设计:MobileNetV3

一、引言 在深度学习领域,随着移动端和嵌入式设备的快速发展,对神经网络模型的轻量化需求日益迫切。传统的卷积神经网络(CNN)虽然在性能上表现出色,但由于其参数量大、计算复杂,往往难以在资源受限的设备上…

【R语言】ggplot2绘图常用操作

目录 坐标轴以及标签的相关主题 图例调整 字体类型设置 颜色相关 ggplot2如何添加带箭头的坐标轴? 标题相关主题调整 修改点图中点的大小 如何使得点的大小根据变量取值的大小来改变? 柱状图和条形图 坐标轴以及标签的相关主题 theme( # 增大X…

C++跨平台开发:策略与实践在软件开发领域

在软件开发领域,跨平台能力意味着一个应用程序可以在不同的操作系统上运行,无需针对每个平台单独编写代码。C作为一种强大的编程语言,因其高效性和灵活性,在跨平台开发领域有着广泛的应用。本文将探讨C跨平台开发的关键策略与实践…