20、Flask实战第20天:Flask上下文
Local线程隔离对象
我们知道通过request可以获取表单中的数据。如果是多个用户同时在用网站,而全局request就只有一个,那么Flask是如何分辨哪用户对应哪个请求呢?
这种情况下,就会用到Local对象,只要绑定在Local对象上的属性,在每个线程中都是隔离的
我们看看,使用多线程修改值,不用local对象时,因为request是全局共享的,只要修改了它的值,就会影响到其它线程!
当我们使用Local对象绑定时,因为在每个线程中都是隔离的,所以不会影响到其它线程
总结:
1、在Flask中,类似于request的对象(还有session等),其实是绑定到了一个werkzeug.local.Local对象上。这样,即使是同一个对象,那么多个线程中都是隔离的。
2、只要满足绑定到这个对象上的属性,在每个线程中都是隔离的,那么它就叫做Thread Local对象
app上下文
app上下文存放在一个LocalStack的栈中,和app应用相关的操作就必须要应用上下文,比如通过current_app获取当前这个app的名字
启动访问浏览器首页
如果我们把print(current_app.name)放到视图函数外面,就会报错
在视图函数中,不用担心上下文的问题,因为视图函数要执行,肯定是通过url的方式执行的,这种情况下,Flask底层就已经自动的帮我们把应用上下文推入到相应的栈中。如果要在视图函数外面执行相关的操作,就必须手动推入上下文。
请求上下文
请求上下文也是存放在一个LocalStack栈中,请求的相关的操作就必须用到请求的上下文,比如url_for反转视图函数
因为在视图函数图,会自动推入上下文,所以正常执行
当在视图函数外面执行,没有请求上下文的关系则会报错
错误提示是没有app上下文推入,那么我们就使用前面的方法推入app上下文
推入app上下文后,又出错,没有请求上下文
因此,手动推入请求上下文:推入请求上下文到栈中,会首先判断有没有应用上下文,如果没有那么就会先推入应用上下文到栈中,然后再推入请求上下文到栈中
为什么上下文需要放在栈中
2、Flask底层是基于werkzeug,werkzeug是可以包含多个app的,所以这时候用一个栈来保存,如果你在使用app1,那么app1应该是要在栈的顶部,如果用完了app1那么app应该从栈中删除,方便其他代码使用下面的app。
2、如果在写测试代码,或者离线脚本的时候,我们有时候可能需要创建多个请求上下文,这时候就需要存放到一个栈中了。使用哪个请求上下文的时候,就把对应的请求上下文放到栈的顶部,用完了就要把这个请求上下文从栈中移除掉。
线程隔离的g对象
g对象是在整个Flask应用运行期间都是可以使用的,并且它也是跟request一样是线程隔离的。这个对象是专门用来存储开发者自定义的一些数据,方便在整个Flask程序中都可以使用。一般使用就是,将一些经常会用到的数据绑定到上面,以后就直接从g上面取就可以了,而不是通过传参的形式,这样更加方便。
比如当我们访问首页的时候会调用一些函数打印日志,并且这个这个会打印出用户名
新建一个utils.py专门用来存储这些工具函数,如下
这样做虽然可以实现需求,但是每条调用都必须传入username参数才可以,如果使用g就方便多了
把username存入到g.username中
函数那边直接调用g.username就可以了
转载于:https://www.cnblogs.com/sellsa/p/9378065.html
20、Flask实战第20天:Flask上下文相关推荐
- python flask快速入门与进阶-Flask基础进阶与python flask实战bbs教程
├─Flask基础进阶 │ 01-HTTP 基础知识.mp4 │ 02-python CGI 与 WebServer.mp4 │ 03-virtuanenv配置及Flask快速示例.mp4 │ 04- ...
- Flask实战----做了一个简易版CSDN
Flask实战 数据库设计 创建数据表 创建数据库操作类 exc_info() Python操作MySQL基本用法 创建表单类 实现登录功能 博客列表功能实现 添加博客功能实现 数据库设计 创建数据表 ...
- OpenCV-Python实战(20)——OpenCV计算机视觉项目在Web端的部署
OpenCV-Python实战(20)--OpenCV计算机视觉项目在Web端的部署 0. 前言 1. Python Web 框架简介 2. Flask 安装与使用 2.1 Flask 安装 2.2 ...
- 实战项目之基于flask的及时聊天系统
web开发就是基于浏览器进行人机交互,当访客登录到指定网址后,不仅可以看到浏览器渲染的画面,同时还可以与后台进行一些操作,再通过浏览器返回后台服务器处理的结果,这段时间一直在摸索利用flask框架来做 ...
- python视频网站项目_Python超羽量级灵活框架 Flask实战微电影视频网站 大小项目通吃 Flask实战项目...
课程名称: Python超羽量级灵活框架 Flask实战微电影视频网站 大小项目通吃 Flask实战项目视频教程 课程简介: Flask作为Python编写的Web小型框架,可以使用Python快速开 ...
- 想学 Java 的你,来看看这 20 个实战项目!
在<程序员修炼之道>一书中,作者建议程序员每年至少学习一门新语言,每季度阅读一本技术书籍.我认为非常有道理.学习编程语言主要是语法.库和框架这三个内容,掌握了正确的方法一个月就可以开始写 ...
- debug信息关闭 tp6_「Flask实战2」设置debug模式
一.为什么需要开启debug模式 1)方便定位:当开启了debug模式,如果代码中抛出了异常,在浏览的页面中可以看到具体的错误信息,以及具体的错误代码位置,方便定位问题. 2)方便调试:当开启了de ...
- python flask实战订餐系统微信小程序-60nginx + uwsgi 实现多进程访问
python flask实战订餐系统微信小程序-60nginx + uwsgi 实现多进程访问 B站配套视频教程观看 uwsgi多进程配置 uwsgi.ini配置 nginx和uwsgi通过配置文件s ...
- python flask实战订餐系统微信小程序-59flask部署单进程启动服务
欢迎关注原创 Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn. ...
最新文章
- python拿什么做可视化界面好-python爬虫如何制作可视化界面?(pyqt5环境配置篇)...
- 【温故知新】CSS学习笔记(外边距合并)
- 论文Mathtype公式自动编号
- C++字符串格式化 sprintf详解
- [Linux] 使用 SCP 指令,讓您傳送檔案至遠端、下載檔案
- Packet Voice Modeling 语音包模型
- 运维系统 联想服务器,联想运维方案.pdf
- 计算机系统三员试题,2013年计算机软考程序员试题及答案3
- android桌面,Android Q带来全新桌面模式
- ruby所有版本下载地址
- Hadoop纠删码(Erasure Coding)简介
- html大屏可视化边框怎么弄的,做大屏可视化,你需要知道这几点
- 淘宝商城:将公布和解条件
- 鸢尾花决策树分类及可视化
- 孟岩大大《理解矩阵一二三》语录
- pythonopencv人脸识别考勤_Python+Opencv+Tkinter指纹识别与人脸识别的门禁兼考勤(一)...
- uni-app 点击图片放大预览
- STM32H743ZI+MPU+LWIP ping解决
- 石家庄医学高等专科学校计算机试题,石家庄医学高等专科学校高职单招医学类对口职业测试题...
- 人力资源数据可视化技术架构
热门文章
- 以某个字符开始_小白从零开始数据分析01—Excel常用公式汇总(数据清洗)
- linux网页无法连接到服务器,linux – 无法连接到SMTP服务器
- 视觉错觉模型_有才!将立体模型涂改伪装成平面二次元,视觉错觉玩法在日本风靡...
- ajax后台重定向会返回什么_第三十五天JavaScript中的ajax
- apply和call
- SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase, Ha
- @RequestBody注解分析
- 为什么jsp写script代码报错_JSP 报错:ReferenceError: $ is not defined
- mysql 事务 注意 优化_MySQL入门详解——事务、锁、优化
- pip download的使用记录