当前位置: 首页 > news >正文

flask学习3-深入

flask学习-深入

  • flask学习-深入
    • 1. 应用程序结构和生命周期 — Flask 文档 (3.1.x)
    • 2.应用程序上下文 — Flask 文档 (3.1.x)
    • 3. 请求上下文 — Flask 文档 (3.1.x)
      • 上下文的生命周期
      • 手动推送上下文
      • 关于代理的注意事项
    • 4.使用蓝图的模块化应用程序 — Flask 文档 (3.1.x)
    • 5.扩展 — Flask 文档 (3.1.x)
    • 6.命令行界面 — Flask 文档 (3.1.x)
    • 7. 开发服务器 — Flask 文档 (3.1.x)
    • 8.Flask 的模式 — Flask 文档 (3.1.x)
    • 9.使用 async 和 await — Flask 文档 (3.1.x)
    • 10. 为什么要使用WSGI 服务器
      • 1. **性能优化**
      • 2. **稳定性与可靠性**
      • 3. **安全性**
      • 4. **与 Web 服务器的协作**
      • 5. **扩展性**
      • 6. **适合生产环境**
      • 总结
      • 补充:
      • FastAPI 部署

flask学习-深入

1. 应用程序结构和生命周期 — Flask 文档 (3.1.x)

https://flask.palletsprojects.com/en/stable/lifecycle/#application-structure-and-lifecycle

  • 为应用程序提供服务
    • 浏览器或其他客户端发出 HTTP 请求。
    • WSGI 服务器接收请求。
    • WSGI 服务器将 HTTP 数据转换为 WSGI dict。environ
    • WSGI 服务器使用 .environ
    • WSGI 应用程序 Flask 执行其所有内部处理以路由请求 添加到 View 函数、处理错误等。
    • Flask 将 View 函数返回转换为 WSGI 响应数据,传递给 WSGI 服务器。
    • WSGI 服务器创建并发送 HTTP 响应。
    • 客户端收到 HTTP 响应。
  • 如何处理请求
    • WSGI 服务器调用 Flask 对象,该对象调用.
    • 将创建一个对象。这会将 WSGI dict 转换为对象。它还会创建一个对象。environ``AppContext
    • 应用程序上下文被推送,这 makes 和available。
    • 信号已发送。
    • 请求上下文被推送,这 makes和 available。
    • 会话将打开,并使用应用程序的 实例加载任何现有会话数据。
    • 该 URL 将与在应用程序设置期间向[装饰器注册的URL 规则进行匹配。如果没有匹配项,则错误 - 通常是 404, 405 或 redirect - 被存储以供以后处理。
    • 信号已发送。
    • 将调用任何``修饰的函数。
    • 将调用任何``修饰的函数。如果 这些函数返回一个值,它会立即被视为响应。
    • 如果 URL 在几个步骤前与路由不匹配,则现在会引发该错误。
    • 与匹配的 URL 关联的修饰视图函数,并返回要用作响应的值。
    • 如果到目前为止任何步骤引发了异常,并且存在与异常类或 HTTP 错误代码匹配的修饰函数,则为 调用以处理错误并返回响应。
    • 无论返回响应值的内容 - before request 函数、视图还是 error 处理程序,该值将转换为 Object。
    • 调用任何修饰的函数,然后清除。
    • 任何装饰函数都会被调用,这些函数可以修改 响应对象。
    • 会话将被保存,并使用应用程序的 .
    • 信号已发送。
    • 如果到目前为止任何步骤引发了异常,并且它未由错误处理程序处理 函数,它现在已处理。HTTP 异常被视为响应,其 对应的状态码,其他异常将转换为通用的 500 响应。信号已发送。
    • 响应对象的 status、headers 和 body 将返回到 WSGI 服务器。
    • 将调用任何修饰的函数。
    • 信号已发送。
    • 请求上下文已弹出,并且不再是 可用。
    • 将调用任何修饰的函数。
    • 信号已发送。
    • 应用程序上下文已弹出并且不再 可用。
    • 信号已发送。

2.应用程序上下文 — Flask 文档 (3.1.x)

https://flask.palletsprojects.com/en/stable/appcontext/

  • 导入实例 在项目中的模块中容易出现循环导入问题,解决这个问题而生。

3. 请求上下文 — Flask 文档 (3.1.x)

https://flask.palletsprojects.com/en/stable/reqcontext/

上下文的生命周期

当 Flask 应用程序开始处理请求时,它会推送一个请求 context,该作也会推送 App 上下文。当 request 结束,它会先弹出 request 上下文,然后弹出 application 上下文。

上下文对于每个线程(或其他 worker 类型)都是唯一的。``无法传递给另一个线程,则另一个线程具有 不同的上下文空间,并且不会知道父级的请求 线程指向。

上下文局部变量是使用 Python 的 和 Werkzeug 的Python 管理 生命周期,本地代理会包装 低级接口,使数据更易于使用。

手动推送上下文

def generate_report(year):
    format = request.args.get("format")
    ...

with app.test_request_context(
    "/make_report/2017", query_string={"format": "short"}
):
    generate_report()

关于代理的注意事项

Flask 提供的一些对象是其他对象的代理。这 每个 worker thread 的 proxies 访问方式相同,但是 指向幕后绑定到每个 worker 的唯一对象 在此页面上描述。

大多数时候,您不必关心这些,但有一些 例外情况,最好知道此对象实际上是一个代理:

  • 代理对象不能将其类型伪装为实际对象类型。 如果要执行实例检查,则必须在 对象被代理。
  • 在某些情况下需要对代理对象的引用, 例如发送 Signal 或将数据传递到后台 线。

如果需要访问代理的底层对象,请使用以下方法:_get_current_object()

app = current_app._get_current_object()
my_signal.send(app)

4.使用蓝图的模块化应用程序 — Flask 文档 (3.1.x)

https://flask.palletsprojects.com/en/stable/blueprints/

  • 之前写博客和权限用的就是蓝图,懒得写了看上篇吧

5.扩展 — Flask 文档 (3.1.x)

https://flask.palletsprojects.com/en/stable/extensions/

6.命令行界面 — Flask 文档 (3.1.x)

https://flask.palletsprojects.com/en/stable/cli/

    <

相关文章:

  • ConcurrentHashMap底层原理
  • RK3588部署YOLOv8(2):OpenCV和RGA实现模型前处理对比
  • 网络安全需要报班学习吗?
  • 重塑未来:生成式AI如何重构企业数据基因?三大技术重构的生死局
  • Paper Reading | AI 数据库融合经典论文回顾
  • ‌HTTP/1.0、HTTP/2.0和HTTP/3.0的区别
  • Pytest自动化框架
  • 深入理解 JavaScript 执行上下文
  • 【LTSPCIE】D触发器的搜索和使用
  • K8S高可用Web应用部署方案
  • Docker网络设置
  • java遍历
  • qt小项目,简单的音乐播放器
  • PyTorch深度学习框架60天进阶学习计划第13天:模型保存与部署
  • CogView: 基于Transformer的通用领域文本到图像生成
  • 国产编辑器EverEdit - 设置文件类型关联为EverEdit
  • 智慧菜场系统(源码+文档+讲解+演示)
  • 文档操作方法得合理使用
  • python 海龟作图 从爱心到旋转爱心
  • 专题二找到字符串中所有字母异位词
  • 天河建设网站系统/怎么让百度收录
  • 寿光专业做网站的公司/西安优化排名推广
  • 网站商城建设费用/班级优化大师的功能有哪些
  • 吉林长春今天疫情新增/seo优化服务公司
  • 亚马逊卖家做自己网站/sem是什么的英文缩写
  • 村级网站建站/营销团队找产品合作