在flask应用中,所有的flask应用都必须创建一个应用实例。web服务器把它接收的来自客户端的请求通过WSGI的协议传递给这个对象以进行处理。这时候,它会提供一种叫上下文的神奇环境,它能让一些对象可以全局可见,这样你的视图函数就可以去访问这些对象做些处理,而又在同时有那么多请求时确保线程安全。
flask里有两种上下文,应用上下文和请求上下文,这两种上下文里暴露出了4种变量:
应用上下文 |
current_app | 活动应用程序的应用实例 |
应用上下文 |
g | 在处理请求时临时存储数据,每次请求都会被重设 |
请求上下文 |
request | request对象,封装了客户端发出的http请求的内容 |
请求上下文 |
session | 用来存储值的字典,这些值在请求中是被记住的 |
flask在调度每个请求前都会push这两种上下文,而请求被处理后又被移除。应用上下文被push时它对应的两个变量就可以被线程访问了,请求上下文也是一样的道理。当然,假如这些上下文没有被激活的话,访问这些变量就会引发错误了。
举个例子:
>>>from flask import Flask, current_app >>>app = Flask(__name__) >>>current_app Traceback (most recent call last): ... RuntimeError: working outside of application context >>>app_ctx = app.app_context() >>>app_ctx.push() >>>current_app.name ‘__main__‘ >>>app_ctx.pop()
时间: 2024-11-05 19:05:18