flask中的程序和请求上下文

一次完整的网络请求流程类似于一次网购流程:


一,客户端发送一次请求,假如请求信息是”一瓶500ml可乐“,flask中请求对象收到这个信息。

二,flask收到请求信息,交给对应的视图函数,视图函数去数据库取”一瓶500ml可乐“

三,视图函数将“一瓶500ml可乐”,交给response, response按照网络协议,返回给客户端。流程结束。

在第一步中,要想让视图函数能知道每次请求的内容是什么,一个方式是将请求作为参数传给视图函数。不过这会导致每个视图函数都会增加一个参数。除了访问请求对象,还要访问其他对象,参数会越来越多,视图函数会很混乱。flask使用上下文临时变量,让请求对象变成全局变量,全局可访问。这样就不用每个视图函数都带一个必须的请求参数了。

flask有四个常用的上下文全局变量:

变量名 上下文 说明
current_app 程序上下文 当前激活程序的程序实例,功能类似于app
g 程序上下文 处理请求时用作临时存储的对象
request 请求上下文 请求对象,封装了客户端发出的http请求中内容
session 请求上下文 用户会话,用于存储请求之间需要“记住”的值得字典。比如用户名,账号

 举例:

请求上下文request:

from flask import request

@app.route("/")
def index():
    user_agent=request.headers.get("User-Agent")
    return "<p> Your browser is %s</p>"% user_agent

请求上下文 session:

from flask import request,session

@app.route("/")
def index():
    user_agent=request.headers.get("User-Agent")
    user_name=session.get("user_info").get("loginname")
    return "<p> Your browser is %s</p>"% user_agent

程序上下文 current_app:

from flask import request,session,current_app

@app.route("/")
def index():
    user_agent=request.headers.get("User-Agent")
    user_name=session.get("user_info").get("loginname")
    current_app.logger.info("get user.name")
    # 如果将js变量初始化赋值给了app,可通过下列方式取出
    js_address=current_app.config.get("js_address")
    return "<p> Your browser is %s</p>"% user_agent
原文地址:https://www.cnblogs.com/chaojiyingxiong/p/13442462.html