flask web development 阅读笔记

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


你可能感兴趣的:(python,flask,context)