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上下文相关推荐

  1. python flask快速入门与进阶-Flask基础进阶与python flask实战bbs教程

    ├─Flask基础进阶 │ 01-HTTP 基础知识.mp4 │ 02-python CGI 与 WebServer.mp4 │ 03-virtuanenv配置及Flask快速示例.mp4 │ 04- ...

  2. Flask实战----做了一个简易版CSDN

    Flask实战 数据库设计 创建数据表 创建数据库操作类 exc_info() Python操作MySQL基本用法 创建表单类 实现登录功能 博客列表功能实现 添加博客功能实现 数据库设计 创建数据表 ...

  3. OpenCV-Python实战(20)——OpenCV计算机视觉项目在Web端的部署

    OpenCV-Python实战(20)--OpenCV计算机视觉项目在Web端的部署 0. 前言 1. Python Web 框架简介 2. Flask 安装与使用 2.1 Flask 安装 2.2 ...

  4. 实战项目之基于flask的及时聊天系统

    web开发就是基于浏览器进行人机交互,当访客登录到指定网址后,不仅可以看到浏览器渲染的画面,同时还可以与后台进行一些操作,再通过浏览器返回后台服务器处理的结果,这段时间一直在摸索利用flask框架来做 ...

  5. python视频网站项目_Python超羽量级灵活框架 Flask实战微电影视频网站 大小项目通吃 Flask实战项目...

    课程名称: Python超羽量级灵活框架 Flask实战微电影视频网站 大小项目通吃 Flask实战项目视频教程 课程简介: Flask作为Python编写的Web小型框架,可以使用Python快速开 ...

  6. 想学 Java 的你,来看看这 20 个实战项目!

    在<程序员修炼之道>一书中,作者建议程序员每年至少学习一门新语言,每季度阅读一本技术书籍.我认为非常有道理.学习编程语言主要是语法.库和框架这三个内容,掌握了正确的方法一个月就可以开始写 ...

  7. debug信息关闭 tp6_「Flask实战2」设置debug模式

    一.为什么需要开启debug模式 ​1)方便定位:当开启了debug模式,如果代码中抛出了异常,在浏览的页面中可以看到具体的错误信息,以及具体的错误代码位置,方便定位问题. 2)方便调试:当开启了de ...

  8. python flask实战订餐系统微信小程序-60nginx + uwsgi 实现多进程访问

    python flask实战订餐系统微信小程序-60nginx + uwsgi 实现多进程访问 B站配套视频教程观看 uwsgi多进程配置 uwsgi.ini配置 nginx和uwsgi通过配置文件s ...

  9. python flask实战订餐系统微信小程序-59flask部署单进程启动服务

    欢迎关注原创 Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn. ...

最新文章

  1. python拿什么做可视化界面好-python爬虫如何制作可视化界面?(pyqt5环境配置篇)...
  2. 【温故知新】CSS学习笔记(外边距合并)
  3. 论文Mathtype公式自动编号
  4. C++字符串格式化 sprintf详解
  5. [Linux] 使用 SCP 指令,讓您傳送檔案至遠端、下載檔案
  6. Packet Voice Modeling 语音包模型
  7. 运维系统 联想服务器,联想运维方案.pdf
  8. 计算机系统三员试题,2013年计算机软考程序员试题及答案3
  9. android桌面,Android Q带来全新桌面模式
  10. ruby所有版本下载地址
  11. Hadoop纠删码(Erasure Coding)简介
  12. html大屏可视化边框怎么弄的,做大屏可视化,你需要知道这几点
  13. 淘宝商城:将公布和解条件
  14. 鸢尾花决策树分类及可视化
  15. 孟岩大大《理解矩阵一二三》语录
  16. pythonopencv人脸识别考勤_Python+Opencv+Tkinter指纹识别与人脸识别的门禁兼考勤(一)...
  17. uni-app 点击图片放大预览
  18. STM32H743ZI+MPU+LWIP ping解决
  19. 石家庄医学高等专科学校计算机试题,石家庄医学高等专科学校高职单招医学类对口职业测试题...
  20. 人力资源数据可视化技术架构

热门文章

  1. 以某个字符开始_小白从零开始数据分析01—Excel常用公式汇总(数据清洗)
  2. linux网页无法连接到服务器,linux – 无法连接到SMTP服务器
  3. 视觉错觉模型_有才!将立体模型涂改伪装成平面二次元,视觉错觉玩法在日本风靡...
  4. ajax后台重定向会返回什么_第三十五天JavaScript中的ajax
  5. apply和call
  6. SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase, Ha
  7. @RequestBody注解分析
  8. 为什么jsp写script代码报错_JSP 报错:ReferenceError: $ is not defined
  9. mysql 事务 注意 优化_MySQL入门详解——事务、锁、优化
  10. pip download的使用记录