Flask基础(12)-->请求上下文和应用上下文
请求上下文和应用上下文
请求上下文:可以简单理解为客户端与服务器之间数据交互请求的容器
请求上下文对象有: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)-->请求上下文和应用上下文的更多相关文章
- Flask中的请求上下文和应用上下文
在Flask中处理请求时,应用会生成一个“请求上下文”对象.整个请求的处理过程,都会在这个上下文对象中进行.这保证了请求的处理过程不被干扰.处理请求的具体代码如下: def wsgi_app(self ...
- flask中的上下文_请求上下文和应用上下文
前引 在了解flask上下文管理机制之前,先来一波必知必会的知识点. 面向对象双下方法 首先,先来聊一聊面向对象中的一些特殊的双下划线方法,比如__call__.__getattr__系列.__get ...
- flask 源码专题(三):请求上下文和应用上下文入栈与出栈
1.请求上下文和应用上下文入栈 # 将ctx入栈,但是内部也将应用上下文入栈 ctx.push() def push(self): # 获取到的 top == ctx top = _request_c ...
- flask基础之请求钩子(十二)
前言 什么是请求钩子?在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要统一处理,为了让每个视图函数避免编写重复功能的代码,flask提供了统一的接口可以添加这些处理函数,即请求钩子. 请求钩子 ...
- Flask基础(09)-->请求勾子函数
什么是请求勾子? 为了让每个视图函数避免编写重复的功能代码,flask提供了通用设施的功能,就是所谓的勾子 那么请求勾子就是,在浏览器请求服务器资源的前后挂载相关的处理函数 请求勾子有什么作用? 作用 ...
- 测开之路三十一:Flask基础之请求与相应
from flask import requestrequest.pathrequest.methodrequest.formrequest.argsrequest.values 一般用form获取p ...
- 六十八:flask上下文之app上下文和request上下文
app上下文: 先看现象 current_app源码 手动入栈 app_context()源码 with语句入栈 request上下文 不在app上下文中 即使手动入栈也会报错,不在请求上下文中 ur ...
- Flask基础(13)-->Flask扩展Flask-Script
Flask基础(12)-->Flask扩展Flask-Script # 前提是安装了Flask-Script # 联网运行 pip install flask-script from flask ...
- flask基础之AppContext应用上下文和RequestContext请求上下文(六)
前言 应用上下文和请求上下文存在的目的,官方文档讲的很清楚,可参考: http://www.pythondoc.com/flask/appcontext.html 应用上下文对象在没有请求的时候是可以 ...
随机推荐
- 一张图了解.Net Core和.NetFx和.Net Standard和Xamarin关系
一张图了解 .Net Core和.Net Framework和.Net Standard和Xamarin关系 总结 .NET Standard是一项API规范,每一个特定的版本,都定义了必须实现的基类 ...
- 重识 ArrayList
前言 ArrayList 作为 Java 集合框架中最常用的类,在一般情况下,用它存储集合数据最适合不过.知其然知其所以然,为了能更好地认识和使用 ArrayList,本文将从下面几方面深入理解 Ar ...
- 【Leetcode】【简单】【136. 只出现一次的数字】【JavaScript】
题目描述 136. 只出现一次的数字 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外 ...
- 写一手好SQL很有必要
MySQL性能 最大数据量 最大并发数 查询耗时0.5秒 实施原则 数据表设计 数据类型 避免空值 text类型 索引优化 索引分类 优化原则 SQL优化 分批处理 不做列运算 避免Select * ...
- 牛客小白月赛8 - E - 诡异数字 数位DP
牛客小白月赛8 - E - 诡异数字 题意: 求区间中,满足限制条件的数字的个数. 限制条件就是某些数字不能连续出现几次. 思路: 比较裸的数位DP, DP数组开一个dp[len][x][cnt] 表 ...
- UVA - 315 Network(tarjan求割点的个数)
题目链接:https://vjudge.net/contest/67418#problem/B 题意:给一个无向连通图,求出割点的数量.首先输入一个N(多实例,0结束),下面有不超过N行的数,每行的第 ...
- poj 2406 Power Strings(kmp next的应用)
题目链接:http://poj.org/problem?id=2406 题意:就是求一个字符串最多有几个相同的小字符串组成. 题解:直接求一下next然后找到长度,长度就是len-1-next[len ...
- 树莓派4B NAS系统搭建
一.硬盘挂载 由于之前硬盘(NTFS格式)里有数据不想格式化想直接挂载,就没有格式化成ext4文件格式的. 安装ntfs-3g sudo apt-get install ntfs-3g 加载内核模块 ...
- 【Redis】缓存穿透与缓存雪崩
一.缓存雪崩 1.1 缓存雪崩产生的原因 1.2 解决方案 1.3 锁的方式 1.4 消息中间件 1.5 一级和二级缓存 1.6 均摊分配redis key 失效时间 二.缓存穿透 一.缓存雪崩 1. ...
- Python Flask打造一个视频网站实战视频教程
下载链接:https://www.yinxiangit.com/607.html 目录: 本套课程从零基础讲解flask开发网站.涉及到的知识点包括:Python和pycharm的安装.urls和视图 ...