R

ReflexKR

Reflex 官方文档

用 Reflex 入门 Python 全栈 Web 开发

·

课程概览

1

Reflex 简介与开发环境

2

用组件绘制界面

3

State 与 Var:让数据驱动界面

4

事件与表单:添加客户

5

数据处理与图表

6

总结、调试与下一步

·

附录

用 Reflex 入门 Python 全栈 Web 开发
第1课

时间 0:00–0:35

Reflex 简介与开发环境

学完这一课,你的浏览器里会跑起 Reflex 的默认应用,你也能用一句话说清楚 Reflex 是如何把 Python 代码变成 Web 应用的。

1-1. Reflex 是什么(10 分钟)

一个 Web 应用通常分为两部分:

  • 前端:在浏览器中运行的界面,通常用 HTML、CSS、JavaScript(React 等)编写。
  • 后端:在服务器上运行的逻辑和数据,通常用 Python(Django、FastAPI)等编写。

一般来说,两种语言都得学,还要在两者之间设计 API。Reflex 是一个全栈框架,让你前端和后端都用 Python 来写。

它的工作原理分为三步:

  1. 编译:在应用启动时,把构建界面的 Python 函数(组件)执行一次,转换成 React 代码。生成的结果存放在 .web/ 文件夹中。
  2. 状态在服务器上:数据(State)和事件处理函数都在服务器端的 Python 中运行。
  3. 通过 WebSocket 同步:点击按钮时,浏览器把事件发给服务器,服务器只返回发生变化的状态,界面随之自动重新渲染。
Reflex 工作原理 · 编译一次,事件通过 WebSocket 往返

左边的一个 Python 文件分成两路:界面函数被编译成 React 发送到浏览器,State 则留在服务器上,通过 ②→③ 的往返与界面保持同步。

讲师笔记 — 这三步在整个课程中会反复出现。先用一句话总结:“界面函数只执行一次,事件函数每次都执行”。到第3课讲解为什么不能用 if 时,再把这句话拿出来。

1-2. 准备开发环境(10 分钟)

安装 uv:uv 是一个能同时管理 Python 版本、虚拟环境和依赖包的工具。

# Windows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

检查 Node.js:Reflex 使用 Node.js 或 Bun 来安装和运行界面端(React)的依赖包。Reflex 0.10 要求 Node 22.22.0 及以上。

node -v   # 需要 v22.22.0 及以上

1-3. 创建并运行项目(10 分钟)

uv init tutorial_261019        # 创建 Python 项目
cd tutorial_261019
uv add reflex                  # 安装 reflex(记录到 pyproject.toml)
uv run reflex init             # 生成 Reflex 应用骨架(选择模板)
uv run reflex run              # 启动开发服务器
  • uv run 会在项目的虚拟环境(.venv)中执行命令,不需要手动激活虚拟环境。
  • reflex init 会询问使用哪个模板。如果想从空白应用开始,也可以直接指定,例如 uv run reflex init --template blank。
  • reflex run 启动完成后,用浏览器打开日志中 App running at: http://localhost:3000 的地址。如果 3000 端口已被占用,会自动换成 3001 等端口。
  • 默认情况下,前端运行在 3000 端口,后端运行在 8000 端口。
  • 首次运行需要下载界面相关的依赖包,可能要 1~3 分钟,并且需要联网。
  • 要停止服务器,在终端中按 Ctrl + C。

在浏览器中确认 — 用 --template blank 创建完成后打开 http://localhost:3000,应该能看到下面的界面。右上角的太阳图标是深色模式切换按钮。

localhost:3000

运行效果

Welcome to Reflex!

Get started by editing tutorial_261019/tutorial_261019.py

reflex init 的 blank 模板默认界面

1-4. Windows 上常见的 2 个错误(5 分钟)

这是准备课程时真实遇到的问题。学员很可能也会碰到,请提前提醒。

症状原因解决方法
reflex init 时出现 UnicodeEncodeError: 'cp949' codec can't encode character '—'Windows 的系统代码页不是 UTF-8 时,用系统默认编码写入 AGENTS.md,遇到特殊字符就会失败。上面是韩文 Windows(cp949)的报错;简体中文 Windows 的代码页是 cp936(GBK),会出现同样的错误,只是编码名显示为 'gbk'执行 setx PYTHONUTF8 1 后重启终端,再重新运行 reflex init
reflex run 时出现 restartWithMergedOptions() was called, but the process has already been restartedNode 版本低于要求,Reflex 强制改用 Bun 运行时,而在这条路径上 React Router 重启失败把 Node 升级到 22.22.0 及以上(例如 winget upgrade --id OpenJS.NodeJS.22)
  • 用 setx 设置的环境变量只对新打开的终端生效。如果用的是 VS Code 终端,需要把 VS Code 也重新打开。
  • 如果 winget 提示“找不到已安装的程序包”,用 winget list --name Node 查看实际的包 ID。

检查点

  • node -v 显示 22.22.0 及以上。
  • 运行 uv run reflex run 后,浏览器中能看到默认界面。
  • 能用自己的话解释“界面函数只编译一次,事件函数每次都在服务器上执行”。

← 上一课

课程概览

下一课 →

第2课 · 用组件绘制界面

订阅新课时和新课程通知

本课程新增课时或推出后续课程时,我们会发邮件通知你。

收集项目:电子邮箱 · 用途:本课程的新课时和上线通知 · 保存期限:直到你要求删除。不会用于其他用途,也不会提供给他人。回复任意通知邮件,我们会立即删除。

问答

关于本课有任何疑问都可以在这里留言。所有语言版本页面的提问会汇集在一起。

以纯文本显示,不支持链接和格式。

R

ReflexKR

动手学 Python 和 Reflex。所有示例均已在 Reflex 0.10.0 上实际运行验证。

ReflexKR 免费,没有横幅广告。如果对你有帮助,欢迎请我们喝杯咖啡。 ☕ 请我们喝杯咖啡

联盟链接与赞助说明
한국어English日本語简体中文EspañolDeutsch

© 2026 ReflexKR · Since 2026 · CC BY-NC 4.0

Built with Reflex