zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    线性地址物理地址逻辑地址转换mmu
    C/c++ 宏返回值
    树的子结构
    合并两个排序的链表
    链表中倒数第k个结点
    数值的整数次方
    原码、反码与补码
    二进制中1的个数
    矩形覆盖
    变态跳台阶
  • 原文地址:https://www.cnblogs.com/chaojiyingxiong/p/13442462.html
Copyright © 2011-2022 走看看