请求上下文和应用上下文

请求上下文:可以简单理解为客户端与服务器之间数据交互请求的容器

请求上下文对象有:request、Session

request:封装了HTTP请求的内容,针对的是http的请求

Session:用来记录请求回话中的信息,针对的是用户的信息

应用上下文:应用于存储应用程序中的变量,它的作用主要是帮助request获取当前的应用,它

是伴随request而生,随request而死

应用上下文对象有:current_app、g

current_app存储的变量

  • 应用程序启动的脚本是哪个文件,启动时指定了哪些参数
  • 加载了哪些配置文件,导入了哪些配置
  • 连接了那个数据库
  • 有哪些public的工具类、常量
  • 应用跑在哪个机器上,ip是多少,内存是多大

g变量:

g作为Flask程序全局的一个临时变量,充当中间媒介的作用,我们可以通过他传递一些数据,

g保存的是当前请求的全局变量,不同的请求会有不同的全局变量,可以通过不同的thread id区别

请求上下文和应用上下文的区别

请求上下文:保存了客户端和服务器交互的数据

应用上下文:Flask应用程序运行过程中,保存的一些配置信息,比如程序名、数据库连接、应用信息等。

注意:上下文中的对象只能在指定的上下文中使用,超出范围不能使用。

请求上下文和应用上下文原理和实现(有兴趣研究的可以参考一下):

https://segmentfault.com/a/1190000004223296

下面用代码演示一下请求上下文和应用上下文的用法

请求上下文:

from flask import Flask
from flask import request app = Flask(__name__) # print(request.method) # 不存在请求范围之内(也就是说request在视图函数中才有效),所以会报错
# print(session.get("user_id","")) # 同样也会报错,错误类型当然也是超出请求范围 @app.route('/')
def demo1():
print(request.method) # 当浏览器请求demo1时,打印出客户端的请求方式
return 'demo1' if __name__ == '__main__':
app.run(debug = True)

应用上下文:

from flask import Flask
from flask import current_app app = Flask(__name__) # print(current_app.config.get("DEBUG")) #报错,超出应用上下文的范围 @app.route('/')
def demo1():
print(current_app.config.get("DEBUG")) # 打印当前应用程序DEBUG的状态
return 'demo1' if __name__ == '__main__':
app.run(debug = True)

Flask基础(12)-->请求上下文和应用上下文的更多相关文章

  1. Flask中的请求上下文和应用上下文

    在Flask中处理请求时,应用会生成一个“请求上下文”对象.整个请求的处理过程,都会在这个上下文对象中进行.这保证了请求的处理过程不被干扰.处理请求的具体代码如下: def wsgi_app(self ...

  2. flask中的上下文_请求上下文和应用上下文

    前引 在了解flask上下文管理机制之前,先来一波必知必会的知识点. 面向对象双下方法 首先,先来聊一聊面向对象中的一些特殊的双下划线方法,比如__call__.__getattr__系列.__get ...

  3. flask 源码专题(三):请求上下文和应用上下文入栈与出栈

    1.请求上下文和应用上下文入栈 # 将ctx入栈,但是内部也将应用上下文入栈 ctx.push() def push(self): # 获取到的 top == ctx top = _request_c ...

  4. flask基础之请求钩子(十二)

    前言 什么是请求钩子?在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要统一处理,为了让每个视图函数避免编写重复功能的代码,flask提供了统一的接口可以添加这些处理函数,即请求钩子. 请求钩子 ...

  5. Flask基础(09)-->请求勾子函数

    什么是请求勾子? 为了让每个视图函数避免编写重复的功能代码,flask提供了通用设施的功能,就是所谓的勾子 那么请求勾子就是,在浏览器请求服务器资源的前后挂载相关的处理函数 请求勾子有什么作用? 作用 ...

  6. 测开之路三十一:Flask基础之请求与相应

    from flask import requestrequest.pathrequest.methodrequest.formrequest.argsrequest.values 一般用form获取p ...

  7. 六十八:flask上下文之app上下文和request上下文

    app上下文: 先看现象 current_app源码 手动入栈 app_context()源码 with语句入栈 request上下文 不在app上下文中 即使手动入栈也会报错,不在请求上下文中 ur ...

  8. Flask基础(13)-->Flask扩展Flask-Script

    Flask基础(12)-->Flask扩展Flask-Script # 前提是安装了Flask-Script # 联网运行 pip install flask-script from flask ...

  9. flask基础之AppContext应用上下文和RequestContext请求上下文(六)

    前言 应用上下文和请求上下文存在的目的,官方文档讲的很清楚,可参考: http://www.pythondoc.com/flask/appcontext.html 应用上下文对象在没有请求的时候是可以 ...

随机推荐

  1. Python之流程控制——while循环

    Python之流程控制--while循环 一.语法 while 条件: 执行代码 while就是当的意思,它指当其后面的条件成立,就执行while下面的代码. 例:写一个从0打印到10的程序 coun ...

  2. 同步机制之一--Synchronized,以及此机制下的锁的本质和种类

    Java中,为了实现同步的操作临界区,线程在执行临界区的代码时,需要获得某个对象的锁.本文介绍获得对象的锁的方法之一----Synchronized关键字. Synchronized关键字的用法 Cl ...

  3. ZKW线段树 非递归版本的线段树

    学习和参考 下面是支持区间修改和区间查询的zkw线段树模板,先记下来. #include <algorithm> #include <iterator> #include &l ...

  4. BZOJ2655 Calc - dp 拉格朗日插值法

    BZOJ2655 Calc 参考 题意: 给定n,m,mod,问在对mod取模的背景下,从[1,m]中选出n个数相乘可以得到的总和为多少. 思路: 首先可以发现dp方程 ,假定dp[m][n]表示从[ ...

  5. POJ 3070 Fibonacci 矩阵快速幂模板

    Fibonacci Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 18607   Accepted: 12920 Descr ...

  6. 通过对微信pc hook实现微信助手

    本软件主要通过对pc端微信hook来实现的,微信版本2.6.8.52. 软件下载地址: http://blog.yshizi.cn/104.html 软件实现功能: 支持爆粉 支持文本消息群发 支持自 ...

  7. 多级树的深度遍历与广度遍历(Java实现)

    目录 多级树的深度遍历与广度遍历 节点模型 深度优先遍历 广度优先遍历 多级树的深度遍历与广度遍历 深度优先遍历与广度优先遍历其实是属于图算法的一种,多级树可以看做是一种特殊的图,所以多级数的深/广遍 ...

  8. 《Fluent Python》---一个关于memoryview例子的理解过程

    近日,在阅读<Fluent Python>的第2.9.2节时,有一个关于内存视图的例子,当时看的一知半解,后来查了一些资料,现在总结一下,以备后续查询: 示例复述 添加了一些额外的代码,便 ...

  9. asp.net core webapi 统一处理返回值、异常和请求参数验证

    现在的开发模式很少用asp.net mvc一个项目直接操作界面和数据库了.大部分都使用前后端分离,更多的是为了让API支持移动端. 后端写webapi的时候必然需要和前端约定请求值和返回值的格式,如果 ...

  10. 使用HTML制作网页

    网页基本信息[编码格式] gb2312:简体中文,一般用于包含中文和英文的页面 ISO-885901:纯英文,一般用于只包含英文的页面 big5:繁体中文,一般用户带有繁体字的页面 utf-8:国际通 ...