何时应该使用 Flask.g

Flask 中的 Flask.g 模块是什么

G 模块或 Flask.g 由 Flask 提供,开发人员在开发 Flask 应用程序时将其用作全局对象,以在 Flask 应用程序或单个请求的上下文中存储和访问数据或任何全局变量。

何时应使用"flask.g"

正如我们在简介中讨论的那样,Flask 提供的 g 变量可以用作 Flask 应用中的路由请求的上下文。但这里有一些应该使用 flask.g 的常见场景,

  1. 你可以使用flask.g 来存储你需要访问数据库的每个请求的连接或会话数据,以便在你的Flask 应用程序连接到某个数据库时随时可用。
  2. 我们需要共享某些配置变量作为请求的一部分的情况可能是另一个用例。
  3. 如果你想保留在许多用户信息请求中加载的某些用户数据或密码,"flask.g"非常有用。

现在你已经知道"flask.g"是什么了,让我带你快速演示如何使用 Flask 应用程序创建、存储和访问"flask.g"变量。我将使用 FlaskHTTPAuth,这是一个扩展,它为我们提供了 Flask 上路由的 HTTP 身份验证模板。

Flask.g的实现

在直接进行代码实现之前,建议使用专用的 Python 开发环境,可以按如下方式创建该环境:

设置开发环境

可以跳过此步骤,但为每个项目使用专用的开发环境始终是一个好主意,这可以使用 Python 虚拟环境来实现。要创建一个,只需运行以下命令:

python 复制代码
$ mkdir python_web_app; cd python_web_app

这将为项目创建一个专用文件夹,你可以将其命名为任何你想要的名称,然后 cd (更改目录)进入新创建的目录,然后运行以下命令,为你的项目创建虚拟环境。

python 复制代码
$ python3 -m venv venv
$ls

现在让我们激活虚拟环境并开始使用它。

python 复制代码
$ .\venv\Scripts\activate

输出:

现在你已经有了一个可以使用的虚拟环境,所以让我们安装 Flask 和flask_httpauth,它们为我们提供了 HTTP 身份验证功能。

python 复制代码
$ pip install flask flask_httpauth

创建 Flask 应用程序

在此演示中,我们将创建一个 Flask 应用程序,其中包含一些使用 Flask_httpauth 库进行身份验证的路由,但首先,让我们创建一个入门应用程序,创建一个文件名 main.py 并向其中添加以下源代码,

python 复制代码
# Flask应用程序

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
return "Hello World"

if __name__ == '__main__':
app.run(debug=True)

正如你所看到的,这是一个非常简单的 HelloWorld Flask 应用程序,只有一条路线。

输出:

在 Flask 应用程序中使用 flask.g

我们通过创建 HTTPBasicAuth 的身份验证实例启动了 Auth Flask 应用程序的开发,该实例为我们提供了 Flask 应用程序中路由的基本身份验证功能。现在让我们通过添加路由和使用 auth 实例来继续开发应用程序。

python 复制代码
# 在同一个main.py文件中导入flask、flask_httpauth和g
from flask import Flask, g
from flask_httpauth import HTTPBasicAuth

# 创建 flask 应用程序
app = Flask(__name__)

# 创建一个flask_httpauth对象
auth = HTTPBasicAuth()

if __name__ == '__main__':
app.run()

现在,更新的源代码由 2 个路由组成,第一个是根路由,我们将在根路由中登录并将用户存储在"g"变量中,第二个"/current_user"从 g 变量返回对存储用户的访问权限。

源代码包含一个"verify_password"函数,该函数在渲染路由之前对用户进行身份验证,如下所示,如果用户输入正确的凭据,他将被视为经过身份验证的用户,并有权访问指定的路由。

python 复制代码
# 在同一个main.py文件中导入flask、flask_httpauth 和 g
from flask import Flask, g
from flask_httpauth import HTTPBasicAuth

# 创建 flask 应用程序
app = Flask(__name__)

# 创建一个flask_httpauth对象
auth = HTTPBasicAuth()

# 用户、管理员的身份验证路由
@auth.verify_password
def verify_password(username, password):
if username == 'admin' and password == 'password':
	g.user = username
	return True
return False

@app.route('/')
@auth.login_required
def index():
return f'This is an authecated route logged in by user,{g.user}'

# 返回当前登录用户
@app.route('/current_user')
@auth.login_required
def get_current_user():
return f"Current logged in user is {g.user}"

if __name__ == '__main__':
app.run()

输出:

经过身份验证后,用户的用户名将存储在"g.user"变量中,然后在 index() 和 get_current_user 路由中使用。将用户名存储在 g 对象中的好处是,我们可以在任何路由中访问它,而无需将其作为参数传递给函数,因为它在整个请求上下文中都可用。

如你所见,通过"/"路由访问的用户名

输出:

如你所见,通过 /current_user 路由访问的用户名

输出:

总之 flask. g 是一个强大的工具,用于在 Flask 的请求上下文中共享数据。但我们应该谨慎使用它,因为存储太多数据可能会导致 Web 应用程序性能下降。另一件事是在多线程应用程序中应该避免使用"flask.g",因为它不是线程安全的。

相关推荐
2401_85763639几秒前
计算机课程管理平台:Spring Boot与工程认证的结合
java·spring boot·后端
也无晴也无风雨1 小时前
深入剖析输入URL按下回车,浏览器做了什么
前端·后端·计算机网络
2401_857610034 小时前
多维视角下的知识管理:Spring Boot应用
java·spring boot·后端
代码小鑫4 小时前
A027-基于Spring Boot的农事管理系统
java·开发语言·数据库·spring boot·后端·毕业设计
颜淡慕潇6 小时前
【K8S问题系列 | 9】如何监控集群CPU使用率并设置告警?
后端·云原生·容器·kubernetes·问题解决
独泪了无痕6 小时前
WebStorm 如何调试 Vue 项目
后端·webstorm
怒放吧德德7 小时前
JUC从实战到源码:JMM总得认识一下吧
java·jvm·后端
代码小鑫8 小时前
A025-基于SpringBoot的售楼管理系统的设计与实现
java·开发语言·spring boot·后端·毕业设计
前端SkyRain8 小时前
后端SpringBoot学习项目-项目基础搭建
spring boot·后端·学习
梦想画家8 小时前
理解Rust 生命周期、所有权和借用机制
开发语言·后端·rust