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 刘大能
浙公网安备 33010602011771号