flask上下文、g变量、current_app
在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的更多相关文章
- Flask上下文管理、session原理和全局g对象
一.一些python的知识 1.偏函数 def add(x, y, z): print(x + y + z) # 原本的写法:x,y,z可以传任意数字 add(1,2,3) # 如果我要实现一个功能, ...
- 六十九:flask上下文之线程隔离的g对象的使用
保存全局对象的g对象g对象是在整个flask应用运行期间都是可以使用的,并且也是和request一样,是线程隔离的,这个对象是专门用来存放开发者自己定义的一些数据,方便在整个flask程序中都可以使用 ...
- Flask - g变量
传送门 http://flask.pocoo.org/docs/1.0/appcontext/#storing-data http://flask.pocoo.org/docs/1.0/appcont ...
- flask上下文详解
一.前言 了解过flask的python开发者想必都知道flask中核心机制莫过于上下文管理,当然学习flask如果不了解其中的处理流程,可能在很多问题上不能得到解决,当然我在写本篇文章之前也看到了很 ...
- Flask上下文
Flask的核心机制!关于请求处理流程和上下文 学习一样东西不能只停留在表面,我们要探索其中的细节,学习作者的编程思想,这样才能更进一步. 关于WSGI WSGI(全称Web Server Gatew ...
- flask上下文全局变量,程序上下文、请求上下文、上下文钩子
Flask上下文 Flask中有两种上下文,程序上下文(application context)和请求上下文(request context) 当客户端发来请求时,请求上下文就登场了.请求上下文里包含 ...
- Flask上下文管理
一.一些python的知识 1.偏函数 def add(x, y, z): print(x + y + z) # 原本的写法:x,y,z可以传任意数字 add(1,2,3) # 如果我要实现一个功能, ...
- Flask上下文管理机制
前引 在了解flask上下文管理机制之前,先来一波必知必会的知识点. 面向对象双下方法 首先,先来聊一聊面向对象中的一些特殊的双下划线方法,比如__call__.__getattr__系列.__get ...
- Flask上下文源码分析(二)
前面第一篇主要记录了Flask框架,从http请求发起,到返回响应,发生在server和app直接的过程. 里面有说到,Flask框架有设计了两种上下文,即应用上下文和请求上下文 官方文档里是说先理解 ...
- Flask上下文源码分析(一)
flask中的上下文分两种,application context和request context,即应用上下文和请求上下文. 从名字上看,可能会有误解,认为应用上下文是一个应用的全局变量,所有请 ...
随机推荐
- 关于API数据接口获取商品的数据的说明
获取商品数据已经成为许多应用程序的重要组成部分.为了实现这一目标,许多公司和技术开发者使用API数据接口来获取相关数据.本文将详细介绍如何使用API数据接口获取商品数据,并使用Python作为编程 ...
- [Python3] 初识py, 一个简单练手的小玩意. 快递查询
有图有真相 脚本代码 最近刚入门py, 准备写点小玩意练练手. 于是决定拿快递100开刀. 因为它的api很简单. # 快递100 API # 作者: 剑齿虎 # 邮箱: yuxiaobo64@gma ...
- 618京东到家APP-门详页反爬实战
一.背景与系统安全需求分析 1. 系统的重要性 上图所示是接口所属位置.对电商平台或在线商店而言,分类查商品都是很重要的,通过为用户提供清晰的商品分类,帮助他们快速找到所需产品,节省浏览时间,提升购物 ...
- 四千行代码写的桌面操作系统GrapeOS完整代码开源了
简介 学习操作系统原理最好的方法是自己写一个简单的操作系统. GrapeOS是一个非常简单的x86多任务桌面操作系统,源代码只有四千行,非常适合用来学习操作系统原理. 源码地址:https://git ...
- Dubbo3应用开发—XML形式的Dubbo应用开发和SpringBoot整合Dubbo开发
Dubbo3程序的初步开发 Dubbo3升级的核心内容 易⽤性 开箱即⽤,易⽤性⾼,如 Java 版本的⾯向接⼝代理特性能实现本地透明调⽤功能丰富,基于原⽣库或轻量扩展即可实现绝⼤多数的 微服务治理能 ...
- Use Closures Not Enumerations
http://c2.com/ Use Closures Not Enumerations I was really disappointed when this turned out not to ...
- ORA-10456: cannot open standby database; media recovery session may be in progress
SQL> alter database recover managed standby database disconnect from session;Database altered.SQL ...
- centos7 oracle11gR2安装
CentOS7安装Oracle 11gR2 图文详解 摘自: http://www.linuxidc.com/Linux/2016-04/130559.htm 最近要运维一个项目,准备在家办公,公司无 ...
- 探究——C# .net 代码混淆/加壳
背景: 保密. 过程: 先查询一下常见的加壳工具: DotFuscator,官方自带,据说免费版混淆程度不高 Virbox Protector,很好很优秀,但是收费 NET Reactor,可能会被识 ...
- HttpWebResponse获取DOM数据注意之ContentEncoding
public string GetKaiJ(string type = "ssq") { /*1.通过WebBrowser控件&HttpWebRequest获得网站信息*/ ...