1. 请求与请求上下文
Flask 从客户端收到请求(请求对象,比如请求某 URL)时,路由给视图函数处理,视图函数需要访问这些请求对象(它封装了客户端发送的 HTTP 请求),这样才能处理请求。
要想让视图函数能够访问请求对象,一个显而易见的方式就是将其作为参数传入视图函数,不过这会导致程序中的每个视图函数都增加一个参数。除了访问请求对象,如果视图函数在处理请求时还要访问其他对象,情况会变得更糟。
为了避免大量可有可无的参数把视图函数弄的一团糟,Flask 使用上下文临时把某些对象变为全局可访问。有了上下文,便可以写出如下的视图函数。
from flask import request
@app.route('/')
def index():
user_agent = request.headers.get('User-Agent')
return '<p>your browser is %s</p>' % user_agent
在这个函数中我们将 request 当做全局变量使用,事实上,request 不可能作为全局变量。试想,在多线程服务器中,多个线程同时处理不同客户端 发送的不同请求时,每个线程看到的 request 对象必然不同。Flask 使用上下文将特定的变量在一个线程中全局可访问,与此同时不会干扰其他线程。