当前位置: 首页 > 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/

    <

http://www.mrgr.cn/news/93493.html

相关文章:

  • pytest结合allure
  • 建筑兔零基础自学python记录39|实战词云可视化项目——章节分布10(上)
  • 【愚公系列】《Python网络爬虫从入门到精通》041-Matplotlib 图表的常用设置
  • 从0开始的操作系统手搓教程23:构建输入子系统——实现键盘驱动1——热身驱动
  • upload-labs靶场 1-21通关
  • Linux12-UDP\TCP
  • 正点原子[第三期]Arm(iMX6U)Linux移植学习笔记-2.1 uboot简介
  • 【Mac】MacOS系统下常用的开发环境配置2025版
  • MRI学习笔记-Meta分析之SDM-PSI
  • Java集合面试题(持续更新)
  • leetcode15 三数之和
  • 嵌入式学习第二十三天--网络及TCP
  • 数据开发岗位: 面试测试题(2025年)
  • Android车机DIY开发之软件篇(二十)立创泰山派android编译
  • upload-labs详解(1-12)文件上传分析
  • 【人工智能】Open WebUI+ollama+deepSeek-r1 本地部署大模型与知识库
  • Linux和gcc/g++常用命令总结
  • 【全球化2.0 | ZStack发布Zaku容器云海外版 加速亚太生态布局
  • Java面试第八山!《Spring框架》
  • BUUCTF逆向刷题笔记(1-12)