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

news/2025/2/24 14:43:38

锋哥原创的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.niftyadmin.cn/n/5864478.html

相关文章

《Operating System Concepts》阅读笔记:p87-p94

《Operating System Concepts》学习第 12 天,p87-p94 总结,总计 8 页。 一、技术总结 1.Android The Android operating system was designed by the Open Handset Alliance (led primarily by Google) and was developed for Android smartphones an…

【Transformer架构】

目录 一、Transformer介绍 1.1 Transformer的诞生 1.2 什么是Transformer 1.3 Transformer的优势 1.4 Transformer的市场 二、Transformer架构 2.1 Transformer模型的作用 2.2 Transformer总体架构图 2.2.1 Transformer总体架构 2.2.2 输入部分 2.2.3 输出部分 2.2.…

二、Spring Framework基础:IoC(控制反转)和DI(依赖注入)

Spring Core:深入理解 IoC 和 DI 原理 在 Java 开发中,Spring Framework 是一个极为重要的框架,而 IoC(控制反转)和 DI(依赖注入)是 Spring 的核心特性。它们不仅帮助开发者简化代码的复杂性&a…

github配置sshkey

使用命令生成sshkey ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 依此会要求输入以下信息,可以使用默认值 设置保存密钥的路径 设置SSH密钥密码(备注:空内容表示不设置SSH密钥密码) 再次确认SSH密钥密…

Linux 命令大全完整版(14)

5. 文件管理命令 chgrp(change group) 功能说明&#xff1a;变更文件或目录的所属群组。语  法&#xff1a;chgrp [-cfhRv][–help][–version][所属群组][文件或目录…] 或 chgrp [-cfhRv][–help][–version][–reference<参考文件或目录>][文件或目录…]补充说明&…

stm32四种方式精密控制步进电机

在搭建完clion的开发环境后&#xff0c;我决定重写之前的项目并优化完善&#xff0c;争取做出完全可落地的东西&#xff0c;也结合要写的论文内容一同学习下去。 因此&#xff0c;首当其冲的就是回到步进电机控制领域&#xff0c;把之前使用中断溢出进行步进电机控制的方案进行…

图像处理篇---图像处理中常见参数

文章目录 前言一、分贝&#xff08;dB&#xff09;的原理1.公式 二、峰值信噪比&#xff08;PSNR, Peak Signal-to-Noise Ratio&#xff09;1.用途2.公式3.示例 三、信噪比&#xff08;SNR, Signal-to-Noise Ratio&#xff09;1.用途2.公式3.示例 四、动态范围&#xff08;Dyna…

如何清理cache-loader生成的缓存目录?

清理 cache-loader 生成的缓存目录可以帮助避免潜在的缓存问题和不必要的磁盘占用。以下是几种清理缓存的有效方法&#xff1a; 一、手动清理 1. 定位缓存目录 在 Webpack 配置中&#xff0c;你可以指定 cache-loader 的缓存目录。默认情况下&#xff0c;缓存目录可能位于项…