在flask中的上下文分为两种 :

请求上下文 (request context)

也就是和请求相关的上下文,记录一些请求相关的数据。

包含:

1、request请求对象

2、session会话

应用上下文 (app context)

记录一些和flask的应用(app=Flask(name))的上下文数据,

主要包含:

**1、current_app **

在项目其它py文件要使用app时就可以通过current_app来获取(减少循环导入的问题 )

使用方法:

from flask import current_app 

这个变量会返回当前的Flask对象
在项目其它文件要使用app时就可以通过current_app来获取(有助于:减少循环导入的问题 )

**2、g变量 **

使用方法:

from flask import g

这个玩意时flask提供给开发者用于存储数据的一个容器,

**特点:**
**每次请求g对象中的数据都会被重置。** **使用场景:**
在视图函数和请求钩子函数之间传递数据。

开发时应用场景和案例

在视图函数中,所有代码本身就是处于应用上下文和请求上下文的。

如果我们在视图函数外使用时,就会报错:RuntimeError: Working outside of application context.

视图函数外使用应用上下文

with app.app_context():
print(current_app.url_map)

视图函数外使用请求上下文:(几乎不用....了解即可)

# 同样的,请求上下文也是
# request.args # RuntimeError: Working outside of request context.
environ = {'wsgi.version':(1,0), 'wsgi.input': '', 'REQUEST_METHOD': 'GET', 'PATH_INFO': '/', 'SERVER_NAME': 'itcast server', 'wsgi.url_scheme': 'http', 'SERVER_PORT': '80'} # 模拟解析客户端请求之后的wsgi字典数据
with app.request_context(environ):
print(request.method)

g变量的使用案例

"""
需求:
每次请求前校验用户是否登录。(使用请求钩子)
然后保存用户登录的id,方便调用。(使用g变量存储)
""" from flask import current_app, g, request, session # 不管是请求上下文还是应用上下文,他们的使用范围都只能在视图函数内使用!
# 生命周期:请求开始, 返回响应 from flask import Flask app = Flask(__name__)
app.secret_key="asdadsadjei6546545" # 注册请求钩子,
@app.before_request
def process_req():
# 伪代码:请求前先校验是否有权限,如果有保存到g对象中
# if xxxx:
# g.username = "小明"
# else:
# abort(401)
session_get = session.get("username")
if session_get:
# 将用户信息保存到g变量中
g.username = session_get @app.route('/index')
def demo1():
# 视图函数中可以使用g变量读取出之前存储的值。
username = g.get("username")
if username:
return "欢迎你:%s" % username
else:
return "重定向到登录页面!" @app.route('/login')
def login():
session["username"] = "小米"
return "登录成功!" if __name__ == '__main__':
app.run(debug=True) # 测试:
# 先不访问/login,然后直接访问/index,会出现”重定向到登录页面“提示
# 访问/login,然后再访问/index,出现”欢迎你: 小米“

flask上下文、g变量、current_app的更多相关文章

  1. Flask上下文管理、session原理和全局g对象

    一.一些python的知识 1.偏函数 def add(x, y, z): print(x + y + z) # 原本的写法:x,y,z可以传任意数字 add(1,2,3) # 如果我要实现一个功能, ...

  2. 六十九:flask上下文之线程隔离的g对象的使用

    保存全局对象的g对象g对象是在整个flask应用运行期间都是可以使用的,并且也是和request一样,是线程隔离的,这个对象是专门用来存放开发者自己定义的一些数据,方便在整个flask程序中都可以使用 ...

  3. Flask - g变量

    传送门 http://flask.pocoo.org/docs/1.0/appcontext/#storing-data http://flask.pocoo.org/docs/1.0/appcont ...

  4. flask上下文详解

    一.前言 了解过flask的python开发者想必都知道flask中核心机制莫过于上下文管理,当然学习flask如果不了解其中的处理流程,可能在很多问题上不能得到解决,当然我在写本篇文章之前也看到了很 ...

  5. Flask上下文

    Flask的核心机制!关于请求处理流程和上下文 学习一样东西不能只停留在表面,我们要探索其中的细节,学习作者的编程思想,这样才能更进一步. 关于WSGI WSGI(全称Web Server Gatew ...

  6. flask上下文全局变量,程序上下文、请求上下文、上下文钩子

    Flask上下文 Flask中有两种上下文,程序上下文(application context)和请求上下文(request context) 当客户端发来请求时,请求上下文就登场了.请求上下文里包含 ...

  7. Flask上下文管理

    一.一些python的知识 1.偏函数 def add(x, y, z): print(x + y + z) # 原本的写法:x,y,z可以传任意数字 add(1,2,3) # 如果我要实现一个功能, ...

  8. Flask上下文管理机制

    前引 在了解flask上下文管理机制之前,先来一波必知必会的知识点. 面向对象双下方法 首先,先来聊一聊面向对象中的一些特殊的双下划线方法,比如__call__.__getattr__系列.__get ...

  9. Flask上下文源码分析(二)

    前面第一篇主要记录了Flask框架,从http请求发起,到返回响应,发生在server和app直接的过程. 里面有说到,Flask框架有设计了两种上下文,即应用上下文和请求上下文 官方文档里是说先理解 ...

  10. Flask上下文源码分析(一)

    flask中的上下文分两种,application context和request context,即应用上下文和请求上下文.   从名字上看,可能会有误解,认为应用上下文是一个应用的全局变量,所有请 ...

随机推荐

  1. Laf & 中大猫谱:让每一只流浪猫都有家

    猫谱简介 中大猫谱是一款辅助校园流浪猫救助的开源小程序项目,服务端使用 Laf 云开发. 猫谱主要功能包括:猫咪信息登记.照片分享.拍照识猫.公告和留言等.项目创立的初衷,是解决校园猫猫交流群里的一个 ...

  2. 用OLED屏幕播放视频(2): 为OLED屏幕开发I2C驱动

    下面的系列文章记录了如何使用一块linux开发扳和一块OLED屏幕实现视频的播放: 项目介绍 为OLED屏幕开发I2C驱动 使用cuda编程加速视频处理 这是此系列文章的第2篇, 主要总结和记录一个I ...

  3. 「hdu - 5780」gcd

    link. 钦定 \(i>j\),研究得 \((x^i-1,x^j-1)\rightleftharpoons(x^i-x^j,x^j-1)\rightleftharpoons(x^j(x^{i- ...

  4. Solution -「BZOJ 3779」重组病毒

    Description Link. Given is a tree. Every node initially has a color which is different from others'. ...

  5. “&”控制命令的运行方式

    在Unix.Linux和类Unix系统中,& 符号有特定的意义,用于控制命令的运行方式.具体来说,& 在命令末尾使用时表示将该命令放入后台运行. 前台运行: 如果你在终端输入一个命令, ...

  6. 一款Redis可视化工具:ARDM | 京东云技术团队

    出众的软件有很多,适合自己的才是最好的. Another Redis Desktop Manager 更快.更好.更稳定的Redis桌面(GUI)管理客户端,兼容Windows.Mac.Linux,性 ...

  7. MySQL的sql_mode设置导致报错1292

    在MySQL8.0的一个PXC集群中,默认的sql_mode设置如下: select @@sql_mode; +-------------------------------------------- ...

  8. CF1368B

    题目简化和分析: 因为要求长度最小,所以我们每个字符就应该发挥最大的价值,不会有没有作用的字符. 设有 \(x_1\) 个 \(c\) ,\(x_2\) 个 \(o\) ,\(x_3\) 个 \(d\ ...

  9. 关于Android Stuido2.3和Eclipse4.4

    近3年没有做Android开发了,当时用是ECLISPE电脑配置2g,用的还可以. 现在又重新开始做安卓程序,发现大家都用AS了,作为技术人员,也就开始用了. (几年前AS已经发布,不过是0.x版本, ...

  10. 21.2 Python 使用Scapy实现端口探测

    Scapy 是一款使用纯Python编写的跨平台网络数据包操控工具,它能够处理和嗅探各种网络数据包.能够很容易的创建,发送,捕获,分析和操作网络数据包,包括TCP,UDP,ICMP等协议,此外它还提供 ...