flask:g对象

一,用途

1. g是什么
g相当于单次请求中的“全局变量”,能在单词请求中调用,但是和其他请求是互相隔离的

2. 生命周期
请求过来创建,请求结束销毁;
仅适用于单次请求,g的生命周期即一个请求的生命周期
注:和session不同,session是多个请求都可以使用的

3. g能做什么
可以在单次请求中定义一些值和操作,随着本次请求结束而销毁;

4,和session的区别:

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

二,例子一

代码:

from flask import request, Flask, redirect, url_for, render_template,abort,g


@photo.route("/upload/", methods=['GET'])
def photo_upload():
    # g保存的是当前请求的全局变量,不同的请求会有不同的全局变量,通过线程id区别
    g.name = "王老七"
    say_hello()
    return render_template('photo/upload.html')

def say_hello():
    name = g.name
    print(f"Hello {name}")

运行结果:

$ flask run
 * Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on http://127.0.0.1:5000
Press CTRL+C to quit
Hello 王老七

三,例子二

代码:

from flask import Blueprint,jsonify,render_template,request
from flask import request, Flask, redirect, url_for, render_template,abort,g

import os
from app import cache, photos
from functools import wraps

# 装饰器,得到当前用户
def obtain_login_user(func):
    """视图函数未加登录验证装饰器, 根据token获取登录用户"""
    @wraps(func)
    def decorator(*args, **kwargs):
        g.current_user = "刘大能"
        return func(*args, **kwargs)

    return decorator

# 上传图片页央
@photo.route("/upload/", methods=['GET'])
@obtain_login_user
def photo_upload():
    # g保存的是当前请求的全局变量,不同的请求会有不同的全局变量,通过线程id区别
    # g.name = "王老七"
    say_hello()
    return render_template('photo/upload.html')

def say_hello():
    name = g.current_user
    print(f"Hello {name}")

运行结果:

$ flask run
 * Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on http://127.0.0.1:5000
Press CTRL+C to quit
Hello 刘大能

 

posted @ 2025-11-11 14:23  刘宏缔的架构森林  阅读(9)  评论(0)    收藏  举报