前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Flask 学习-66.全局g对象的使用

Flask 学习-66.全局g对象的使用

作者头像
上海-悠悠
发布于 2022-09-19 07:43:23
发布于 2022-09-19 07:43:23
1.3K00
代码可运行
举报
运行总次数:0
代码可运行

前言

g 对象也就是global 全局对象,可以用于存放开发者自己定义的一些数据,在整个request生命周期内生效。

g 对象讲解

g 也是我们常用的几个全局变量之一。在最开始这个变量是挂载在 Request Context 下的。但是在 0.10 以后,g 就是挂载在 App Context 下的。 首先,说一下 g 用来干什么,官方在上下文这一张里有这一段说明

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
The application context is created and destroyed as necessary. It never moves between threads and it will not be shared between requests. As such it is the perfect place to store database connection information and other things. The internal stack object is called flask.appctx_stack. Extensions are free to store additional information on the topmost level, assuming they pick a sufficiently unique name and should put their information there, instead of on the flask.g object which is reserved for user code.

g 保存的是当前请求的全局变量,不同的请求会有不同的全局变量,通过不同的thread id区别. 像数据库配置这样重要的信息挂载在app对象上,一些用户相关的数据,就可以挂载在g对象上,这样就不需要在函数里一层层传递。

g一般用来传递上下文的数据,flask里面有很多钩子函数,例如before_first_request之类的,g提供了一个方法将数据共享到正常的路由函数里去。 举个例子,你可以在before_request里面做Http Basic Authentication验证,然后将验证过的用户数据存在g里面,这样在路由函数里就可以直接调用g里面的用户数据了,而不用再搞个全局变量。这样非常方便

使用示例

g对象是在整个flask应用运行期间都是可以使用的,并且也是和request一样,是线程隔离的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from flask import Flask, request, g

app = Flask(__name__)

def is_admin():
    if g.user == 'admin':
        return True
    else:
        return False

@app.route('/login')
def login():
    user = request.args.get('username')
    g.user = user
    if is_admin():
        return {'msg': 'ok', 'admin': 'yes'}
    else:
        return {'msg': 'ok', 'admin': 'no'}

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

g对象的出现,让你在任何位置都能获得用户数据,避免了在函数参数里传递这些数据。

上面代码其实等价于

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def is_admin(user):
    if user == 'admin':
        return True
    else:
        return False

@app.route('/login')
def login():
    user = request.args.get('username')
    if is_admin(user):
        return {'msg': 'ok', 'admin': 'yes'}
    else:
        return {'msg': 'ok', 'admin': 'no'}

g对象有个好处是,当函数写在其它模块的时候,不需要导入这个模块(避免循环导入问题)

g对象的生命周期

g对象的生命周期

  • g对象在整个request请求处理期间生效,这表明,g对象是与request是一一对应的。 一次request请求,就有一个g对象,在这次请求之前,之后,以及同时间的请求里,他们互不干扰。
  • 你在g对象里存储的数据,只能在这一次请求里使用,请求处理结束后,这个g对象就销毁了,存储的数据也就不见了。
  • g对象的生命周期虽然只是一次请求的生命周期,但它是一个应用 上下文对象。

g对象和session的区别

  • session对象是可以跨request的,只要session还未失效,不同的request的请求会获取到同一个session
  • g对象不需要管过期时间,请求一次就g对象就改变了一次,或者重新赋值了一次。

也就是说session可以在我们的这个网站随意都可以用 而 g 只能是这次的请求如果重定向之后就会改变。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-09-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Flask(中间件与全局变量 九)
当Flask应用处理请求时,它会根据从WSGI服务器收到的环境创建一个Request对象.
zx钟
2020/07/07
2.2K0
Python Web Flask源码解读(四)——全局变量
Flask中全局变量有current_app、request、g和session。不过需要注意的是虽然标题是写着全局变量,但实际上这些变量都跟当前请求的上下文环境有关,下面一起来看看。
阳仔
2019/08/23
3.5K0
项目阶段之flask(三)
因为这一部分是独立于首页和认证蓝图的,因此我们为其单独建立一个包news,实现高内聚,低耦合.
小闫同学啊
2019/07/18
4690
项目阶段之flask(三)
web开发框架Flask学习一
flask框架 用Python做Web开发的三大框架特点 Django 主要特点是大而全,集成了很多的组件,例如:Admin Form Model等,不管你用不用的到,他都会为 你提供,通常用于大型Web应用,由于内部组件足够强大,所以使用Django可以做到一气呵成,    Django的优点是大而全,缺点也就露出来,这么多的资源一次性全部加载,肯定会造成cpu资源的浪费 flask
py3study
2020/01/19
7870
Flask入门很轻松 (二)
转载请在文章开头附上原文链接地址:https://www.cnblogs.com/Sunzz/p/10959454.html
py3study
2020/01/15
4230
Flask 入门系列教程(二)
本节,我们先从一道经典的面试题目开始:当你在浏览器中输入一个 URL 并按下 Enter 后,都发生了什么?
周萝卜
2020/09/18
1.2K0
flask系列八之请求方法、g对象和钩子函数
(2)在写form表单的时候,要指定method='post',并且要指定action='/login/'。
wfaceboss
2019/04/08
5420
小白学Flask第八天| Flask上下文和请求钩子
在这篇文章之前,我们学习过request和session这两个小家伙,他们两的功能都非常的强大,我们今天讲上下文对象,也是和他们两有着很大的关系。
Python进击者
2019/09/17
6480
flask 教程_python flask快速入门与进阶
Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活、轻便、安全且容易上手。它可以很好地结合MVC模式进行开发,开发人员分工合作,小型团队在短时间内就可以完成功能丰富的中小型网站或Web服务的实现。另外,Flask还有很强的定制性,用户可以根据自己的需求来添加相应的功能,在保持核心功能简单的同时实现功能的丰富与扩展,其强大的插件库可以让用户实现个性化的网站定制,开发出功能强大的网站。
全栈程序员站长
2022/09/20
2.3K0
Flask 扫盲系列-Flask 上下文
上一次我们做了一个简单的在线股票走势网站,今天我们来继续完善下网站功能,并学习些新的 Flask 知识点。
周萝卜
2020/05/22
4430
python学习 第五篇 flask
#!/usr/bin/env python #coding:utf-8 from flask import Flask,request,render_template,redirect #request 里面包含一次网络请求所有的内容,所有url参数(get的参数),都在request.args里,args是一个类似字典的数据 #render_template 渲染前端html文件,默认渲染/templates下面的文件,有模板功能 #jinjia2模板语言{{}}包裹的是变量 循环语法{% for x i
py3study
2020/01/14
2850
Flask 学习-65.消息闪现 flash
前言 一个好的应用和用户界面都需要良好的反馈。如果用户得不到足够的反馈,那么应用 最终会被用户唾弃。 Flask 的闪现系统提供了一个良好的反馈方式。闪现系统的基 本工作方式是:在且只在下一个请求中访问上一个请求结束时记录的消息。 设置 flash() flask提供了一个非常有用的flash()函数,它可以用来“闪现”需要提示给用户的消息,比如当用户登录成功后显示“欢迎回来!”。 在视图函数调用flash()函数,传入消息内容,flash()函数把消息存储在session中,我们需要在模板中使用全局函数g
上海-悠悠
2022/09/19
6020
Flask 学习-65.消息闪现 flash
新经资讯项目业务逻辑梳理
__init__.py 项目应用初始化文件--应用程序实例、数据库实例、注册蓝图、日志等
汪凡
2019/03/01
9190
Flask 学习-28.flask_jwt_extended插件 JWT 中存储额外数据(additional_claims)
前言 在访问令牌中存储其他信息,以后可以在受保护的视图中访问这些信息。这可以使用additional_claims 带有create_access_token()or create_refresh_token()函数的参数来完成。 get_jwt() 函数在受保护的路径中获取额外的数据。 additional_claims参数使用 重要的是要记住 JWT 没有加密,任何有权访问它的人都可以轻松解码 JWT 的内容。因此,您永远不应该将任何敏感信息放在 JWT 中。 官方文档示例 from flask imp
上海-悠悠
2022/09/06
4770
Python-基于flask的接口框架
Flask是一个Python编写的Web 微框架,让我们可以使用Python语言快速实现一个网站或Web服务。本文参考自Flask官方文档,大部分代码引用自官方文档。
用户9925864
2022/07/27
4800
Flask 学习-67.钩子函数before_request 和 before_first_request 的使用
前言 学过pytest框架的肯定知道什么叫钩子(hook)函数, 钩子函数的作用是在程序运行的过程中插入一段代码做一些事情。 四个钩子 请求钩子是通过装饰器的形式实现,Flask支持如下四种请求钩子: before_first_request      在对应用程序实例的第一个请求之前注册要运行的函数, 只会执行一次 before_request  在每次请求前执行,如果在某修饰的函数中返回了一个响应,视图函数将不再被调用 after_request  如果没有抛出错误,在每次请求后执行接受一个参数:视图函
上海-悠悠
2022/09/19
2.3K0
flask框架2_flask框架介绍
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/179055.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/27
7710
flask框架2_flask框架介绍
Flask快速入门,知识整理
一、Flask介绍(轻量级的框架,非常快速的就能把程序搭建起来)   Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借助jinja2模板来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器。 “微”(mic
用户1214487
2018/01/24
2.1K0
Flask快速入门,知识整理
34. Flask 集成 flask-restful
这种方式当然可以开发 api, 但是当我们想要基于 restful 风格来编写 api,就不太方便了。就需要写 4 个单独的函数视图,如下:
Devops海洋的渔夫
2022/01/14
9170
34. Flask 集成 flask-restful
Flask框架重点知识总结回顾
重点掌握第1种,在工作中,我们的项目在启动的时候,需要预先设置一些配置信息,为了方便管理,便于维护,我们将所有的配置信息,封装在一个类中,然后再进行使用,下面是代码的实现过程,大家可以看一下:
小闫同学啊
2019/07/18
1.3K0
Flask框架重点知识总结回顾
相关推荐
Flask(中间件与全局变量 九)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验