g对象

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()
 

1577669769281

三、使用方式二

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()

1577671029050

1577671096899

三、总结

  • @app.before_request设置的g对象可以被全局访问(原因:因为每次请求都会进入被装饰的函数,所以任意请求都可以被访问到),而在其他请求函数中设置g对象则不可以被访问,只能被自己访问(原因:其他函数访问之后并没有创建)所以要想使用g对象,必须先定义之后才可以被访问,并没有做到定义一次全局都可以访问 其实也就是,你使用他,就要提前创建他,使用过之后就会被销毁

  • g对象和session的区别:

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

  • 发送文件

    导入 from flask import send_file,然后直接使用,send_file('发送的文件')

原文地址:https://www.cnblogs.com/randysun/p/15518261.html