Flask请求-响应循环

Flask请求-响应循环

要想让视图函数能够请求对象,一种直接了当的方式是将其作为参数闯入试图函数,不过这会导致应用中的每个视图函数,不过这会导致每个视图函数都多出一个参数。除了访问请求对象,如果视图函数在处理请求时还要访问其他对象,情况会变得更糟。

为了避免大量可有可无的参数把视图函数弄的一团糟,Flask使用上下文

from flask import Flask

@app.route("/")
def index():
    user_agent = request.header.get("User-Agent")
    return '<p>Your browser is {} </p>'.format(user-agent)
注意,在这个视图函数中我们把request当作全局变量使用。事实上,request不可能是全局变量。试想,在多个线程处理不同客户端发送的不同请求时,每个线程看到的request对象必然不同。Flask使用上下文让特定的变量在一个线程中全局可访问,与此同时却不会干扰其他的线程。
变量名上下文说明
current_app应用上下文当前应用的应用实例
g应用上下文处理请求时用作临时存储的对象,每次请求都会重设这个变量
request请求上下文请求对象,封装了客户端发出的HTTP请求中的内容
session请求上下文用户会话,值为一个字典,存储请求之间需要记住的值

没激活应用上下文之前就调用curren_app.name会导致错误,但推送完上下文就可以调用了。值的注意的是,获取应用上下文的方法是在应用实例上调用app.app_context()