Flet 的 FastAPI 和异步 API 改进

💡 原文英文,约1300词,阅读约需5分钟。
📝

内容提要

Flet 0.21改进了Web应用开发体验,使用FastAPI和Uvicorn替代了内置的Web服务器。它还允许使用任何ASGI兼容的服务器进行托管。发布引入了新的环境变量来控制Web应用的托管。Flet现在是一个异步优先的框架,允许在同一个应用中使用同步和异步方法。API变化包括废弃某些方法和引入新的Cupertino控件。发布还添加了一个新的事件,用于监听应用生命周期的变化。

🔎

延伸解读

内置服务器移除带来的部署简化

Flet 0.21 移除了内置的 Go 语言 Web 服务器 Fletd,改用 FastAPI 和 Uvicorn。这意味着 Web 服务器现在直接集成在 Flet 应用中,消除了之前 Python 应用与 Fletd 之间的 WebSocket 通信开销。对于开发者而言,生产环境部署不再需要额外步骤,只需使用相同的 ft.app(main) 命令即可运行应用,简化了部署流程。

ASGI 兼容性扩展托管选择

通过设置 export_asgi_app=True,Flet 应用可以导出为 ASGI 应用,从而能够使用任何 ASGI 兼容的服务器进行托管,例如 Uvicorn、Hypercorn 或 Daphne。这为开发者提供了更大的灵活性,可以根据现有基础设施或性能需求选择合适的服务器,而不再局限于 Flet 内置的解决方案。

异步优先与同步混合编程

Flet 0.21 转向异步优先框架,允许在同一个应用中混合使用同步和异步方法。同步事件处理器会在单独的线程中运行,而异步处理器则在 asyncio 任务中执行。此外,在异步函数中不再需要调用 page.add_async(),直接使用 page.add() 即可。这降低了异步编程的复杂性,使代码更直观。

API 变更与迁移注意事项

此版本包含多项破坏性变更:flet_fastapi 包已弃用,其内容移至 flet.fastapi 模块;UserControl 类被弃用,建议直接继承特定控件;Control.build() 不再返回控件,而是更新继承的属性;Control.did_mount_async() 和 will_unmount_async() 被弃用。升级时需检查代码并相应调整,以避免兼容性问题。

❓

Q&A

Flet 0.21 的主要改进是什么?

Flet 0.21 使用 FastAPI 和 Uvicorn 替代了内置的 Web 服务器,改进了 Web 应用开发体验。

如何在 Flet 中使用异步方法?

Flet 现在是一个异步优先的框架,允许在同一应用中混合使用同步和异步方法。

Flet 0.21 中有哪些 API 变化?

Flet 0.21 废弃了某些方法,并引入了新的 Cupertino 控件,同时更新了控制器的 API。

如何托管 Flet Web 应用?

可以使用任何 ASGI 兼容的服务器托管 Flet Web 应用,如 Uvicorn、Hypercorn 或 Daphne。

Flet 0.21 引入了哪些新的环境变量?

新环境变量包括 FLET_FORCE_WEB_SERVER、FLET_SERVER_PORT、FLET_SERVER_IP 等,用于控制 Web 应用的托管。

Flet 0.21 中如何处理应用生命周期变化?

可以使用新的 Page.on_app_lifecycle_state_change 事件来监听应用生命周期的变化,如 SHOW、RESUME、HIDE 等。

🏷️

标签

➡️

继续阅读