g对象
一、g对象
- 作用: 当请求一个函数时候,可以设置一个变量,提供给全局使用
二、使用方式一
from flask import g, Flask, send_file
app = Flask(__name__)
@app.before_request
def request_before():
if request.path == "/login":
g.name = "randy login"
# 全局访问
g.name = 'randy'
print('before request 设置g对象')
@app.route('/')
def index():
print(g.name)
return g.name
# 发送文件
@app.route('/file')
def file():
print('文件下载!')
return send_file(r'01flask源码分析.py')
if __name__ == '__main__':
app.run()
三、使用方式二
def set_g():
g.name = 'g randy'
@app.route('/')
def index():
# print(g.name)
set_g()
print(g.name)
return g.name
@app.route('/login')
def login():
print(g.name)
return 'ok'
if __name__ == '__main__':
app.run()
三、总结
-
在
@app.before_request
设置的g对象可以被全局访问(原因:因为每次请求都会进入被装饰的函数,所以任意请求都可以被访问到),而在其他请求函数中设置g对象则不可以被访问,只能被自己访问(原因:其他函数访问之后并没有创建)所以要想使用g对象,必须先定义之后才可以被访问,并没有做到定义一次全局都可以访问 其实也就是,你使用他,就要提前创建他,使用过之后就会被销毁 -
g对象和session的区别:
session对象是可以跨request的,只要session还未失效,不同的request的请求会获取到同一个session,但是g对象不是,g对象不需要管过期时间,请求一次就g对象就改变了一次,或者重新赋值了一次
-
发送文件
导入
from flask import send_file
,然后直接使用,send_file('发送的文件')