上下文:即语境,语意,在程序中可以理解为在代码执行到某一时刻时,根据之前代码所做的操作以及下文即将要执行的逻辑,可以决定在当前时刻下可以使用到的变量,或者可以完成的事情。
Flask
中有两种上下文:请求上下文和应用上下文。
Flask
中上下文对象:相当于一个容器,保存了 Flask
程序运行过程中的一些信息。
1.请求上下文
在 flask
中,可以直接在视图函数中使用 request 这个对象进行获取相关数据,而 request
就是请求上下文的对象,保存了当前本次请求的相关数据,请求上下文对象有:request、session
request
:
封装了HTTP
请求的内容,针对的是http请求。
举例:user = request.args.get('user')
,获取的是get
请求的参数。
session
:
用来记录请求会话中的信息,针对的是用户信息。
举例:session['name'] = user.id
,可以记录用户信息。还可以通过session.get('name')
获取用户信息。
2.应用上下文
它的字面意思是 应用上下文,但它不是一直存在的,它只是request context
中的一个对 app
的代理(人),所谓local proxy
。它的作用主要是帮助 request
获取当前的应用,它是伴 request
而生,随 request
而灭的。
应用上下文对象有:current_app,g
current_app
:
应用程序上下文,用于存储应用程序中的变量,可以通过current_app.name
打印当前app
的名称,也可以在current_app
中存储一些变量,例如:
- 应用的启动脚本是哪个文件,启动时指定了哪些参数
- 加载了哪些配置文件,导入了哪些配置
- 连了哪个数据库
- 有哪些
public
的工具类、常量 - 应用跑再哪个机器上,
IP
多少,内存多大
蓝图:item.py
# -*- coding: utf-8 -*-
# @File : item.py
# @author: 北极的三哈
# @email : Flymeawei@163.com
# @Time : 2022/12/16 21:25
""""""
from flask import Blueprint, current_app
item_bp = Blueprint('item', __name__)
@item_bp.route('/sanHa')
def item1():
print(current_app.sanHa)
return 'Hello Bi Ji De sanHa'
current_app
就是当前运行的flask app
,在代码不方便直接操作flask
的app
对象时,可以操作current_app
就等价于操作flask app
对象。
应用上下文.py
# -*- coding: utf-8 -*-
# @File : 应用上下文.py
# @author: 北极的三哈
# @email : Flymeawei@163.com
# @Time : 2022/12/16 21:25
""""""
from flask import Flask
from item import item_bp
app = Flask(__name__)
# 注册蓝图
app.register_blueprint(item_bp, url_prefix='/item')
@app.route('/')
def hello_hello():
app.sanHa = 'Bei Ji De sanHa' # 往 app中设置任意一个参数
return 'Hello World'
3.G对象
g
作为 flask
程序全局的一个临时变量,充当中间媒介的作用,我们可以通过它在一次请求调用的多个函数间传递一些数据。每次请求都会重设这个变量。
蓝图:item.py
# -*- coding: utf-8 -*-
# @File : item.py
# @author: 北极的三哈
# @email : Flymeawei@163.com
# @Time : 2022/12/16 21:25
""""""
from flask import Blueprint, current_app, g
from db_handler import find_item
item_bp = Blueprint('item', __name__)
@item_bp.route('/sanHa')
def item1():
print(current_app.sanHa)
g.item_id = '1001'
g.item_name = 'sanHa'
find_item()
return 'Hello Bi Ji De sanHa'
查询数据:db_handler.py
# -*- coding: utf-8 -*-
# @File : db_handler.py
# @author: 北极的三哈
# @email : Flymeawei@163.com
# @Time : 2022/12/16 21:47
""""""
from flask import g
def find_item():
print('从数据库中查询数据,通过多个不确定的条件')
print(g.item_id)
print(g.item_name)
应用:应用上下文.py
# -*- coding: utf-8 -*-
# @File : 应用上下文.py
# @author: 北极的三哈
# @email : Flymeawei@163.com
# @Time : 2022/12/16 21:25
""""""
from flask import Flask
from item import item_bp
app = Flask(__name__)
# 注册蓝图
app.register_blueprint(item_bp, url_prefix='/item')
@app.route('/')
def hello_hello():
app.sanHa = 'Bei Ji De sanHa' # 往 app中设置任意一个参数
return 'Hello World'