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
  • 相关阅读:
    vim 学习笔记系列(前言)
    12306网站推出图片验证 反破解
    如何提升电脑的速度(五年时间收集各家精华,绝对史上最全)
    电脑维修和维护 毕业总结及经验报告
    留学生 电脑安全与维护手册 (留学须知)
    Progress数据库配置与应用
    润乾报表与DERBY数据库的创建连接详解
    图形报表部署在Linux下出现乱码解决办法
    sqlserver为数据库表增加自增字段
    五种常用web服务器jvm参数设置
  • 原文地址:https://www.cnblogs.com/chaojiyingxiong/p/13442462.html
Copyright © 2011-2022 走看看