Python Flask学习知识点(六)

简介: timg (10).jpgimage.pngFlask多线程机制发送请求和服务器处理请求的线程之间的关系?客户端发送十个请求,Flask开启多少个线程处理请求?其实是由web服务器开启的多线程。
img_c4c2dd420ed5c7d133addb54360df967.jpe
timg (10).jpg
img_ff7a9a4843057a32a0ab99bdd772fe9b.png
image.png

Flask多线程机制

发送请求和服务器处理请求的线程之间的关系?
客户端发送十个请求,Flask开启多少个线程处理请求?其实是由web服务器开启的多线程。
如果要上生产线,一般不会用Flask自带的web server。
对于一个web网站而言,必须有承受并发的能力。

单线程:

如果是单线程,只有当一个请求处理完成之后,才会处理下一个请求,所以这时候看起来就像是要排队一样
单线程下,当一个请求进来之后,Flask会实例化一个Request对象,用这个对象来装载请求信息,这时候只有一个实例化的request,当第一个请求结束后,Flask会再实例化一个Request对象来装载第二个请求,然后request变量又指向当前请求,那么这样众多用户就不会混乱。

多线程:

werkzeug库下local模块下的Local对象,Flask就是用Local来做线程隔离的。
Local对象的本质就是用线程的id号作为字典的键这种基本原理实现的。

Flask中线程隔离栈LocalStack

LocalStack 是实现线程隔离的栈结构,把Local封装了。
LocalStack需要使用push方法

LocalStack:

  • Local特性

  • Stack特性:栈结构,只能取栈顶元素,先进后出

使用线程隔离的意义在于:使当前线程能够正确引用到他自己做创建的对象,而不是引用到其他线程做创建的对象

线程隔离对象 LocalStack
问:Flask使用LocalStack为了隔离哪个对象?
答:被线程隔离对象 RequestContext AppContext
Flask核心对象全局只有一个。

看一段测试代码,测试下LocalStack线程隔离:

import threading
from werkzeug.local import LocalStack

stack = LocalStack()
stack.push('a')
print('主线程top:', stack.top)


def child():
    print("子线程:", stack.top)
    stack.push('b')
    print('子线程:', stack.top)


t = threading.Thread(target=child, name='demo')
t.start()

print('主线程top:', stack.top)

打印结果:

主线程top: a
子线程: None
子线程: b
主线程top: a

还有哪些是被线程隔离的对象?


img_896acc7302962e14bc62573e29151872.png
image.png

以上都是被线程隔离的对象。

ViewModel的基本概念

很多时候,我们的数据在提交给页面的时候需要做一些处理或者裁剪,这时就需要ViewModel层来做这件事,如图:


img_b3095175b736f174f55cc94d07157f9b.png
image.png
viewModel作用
  1. 裁剪
  2. 修饰
  3. 合并

app文件夹下新建文件夹view_models,这里就可以处理数据的裁剪、修饰、合并。

单页面与网站的区别

一个网站页面由哪几部分构成?

  • JS CSS(静态文件)
  • HTML模板
  • 数据
网站

一般来讲,服务器端把数据返回到HTML模板中,称之为服务器渲染,然后返回到浏览器给用户,此时,客户端浏览器网页中的JS CSS起作用再一次发起请求渲染页面,这是一个完整的页面就处理完了。


img_69869fc1e922b3f36d5e11c7166317b2.png
image.png
单页面

浏览器去请求一个静态的html,html返回到客户端浏览器后,html里边的js css 发起请求,来填充数据。


img_c4a836b5915112a144b833e4cc1a1526.png
image.png
单页面和普通网站有什么区别:

区别的第一种说法:
对于多页面普通网站而言,大多数情况下它的数据渲染或者说模板填充都是在服务器端进行的,
而对于单页面来说,他数据的渲染是在客户端进行的。

区别的第二种说法:
单页面业务逻辑也就是说数据运算主要集中在客户端用js去操作,而普通网站而言,绝大多数业务逻辑是在服务器,也就是视图函数中去进行的。

目录
相关文章
|
3天前
|
API 数据库 数据安全/隐私保护
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】Django REST framework (DRF) 是用于构建Web API的强力工具,尤其适合Django应用。本文深入讨论DRF面试常见问题,包括视图、序列化、路由、权限控制、分页过滤排序及错误处理。同时,强调了易错点如序列化器验证、权限认证配置、API版本管理、性能优化和响应格式统一,并提供实战代码示例。了解这些知识点有助于在Python面试中展现优秀的Web服务开发能力。
20 1
|
9天前
|
Python
python学习3-选择结构、bool值、pass语句
python学习3-选择结构、bool值、pass语句
|
3天前
|
SQL 中间件 API
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】**Flask是Python的轻量级Web框架,以其简洁API和强大扩展性受欢迎。本文深入探讨了面试中关于Flask的常见问题,包括路由、Jinja2模板、数据库操作、中间件和错误处理。同时,提到了易错点,如路由冲突、模板安全、SQL注入,以及请求上下文管理。通过实例代码展示了如何创建和管理数据库、使用表单以及处理请求。掌握这些知识将有助于在面试中展现Flask技能。**
11 1
Flask框架在Python面试中的应用与实战
|
4天前
|
数据可视化 Python
Python模型评估与选择:面试必备知识点
【4月更文挑战第17天】本文深入探讨了Python模型评估与选择在面试中的关键点,包括性能度量、过拟合与欠拟合识别、模型比较与选择、模型融合和偏差-方差权衡。强调了避免混淆评估指标、忽视模型验证和盲目追求高复杂度模型的常见错误,并提供相关代码示例,如交叉验证、网格搜索和超参数调优。通过理解这些概念和技巧,可在面试中展示出色的数据科学能力。
30 12
|
4天前
|
数据安全/隐私保护 Python
Python Flask-Mail实现邮件发送
Python Flask-Mail实现邮件发送
|
7天前
|
机器学习/深度学习 算法 Python
使用Python实现集成学习算法:Bagging与Boosting
使用Python实现集成学习算法:Bagging与Boosting
18 0
|
8天前
|
Python
python学习-函数模块,数据结构,字符串和列表(下)
python学习-函数模块,数据结构,字符串和列表
49 0
|
9天前
|
Python
python学习14-模块与包
python学习14-模块与包
|
9天前
|
Python
python学习12-类对象和实例对象
python学习12-类对象和实例对象
|
9天前
|
数据采集 Python
python学习9-字符串
python学习9-字符串