学完这一课,你的浏览器里会跑起 Reflex 的默认应用,你也能用一句话说清楚 Reflex 是如何把 Python 代码变成 Web 应用的。
一个 Web 应用通常分为两部分:
一般来说,两种语言都得学,还要在两者之间设计 API。Reflex 是一个全栈框架,让你前端和后端都用 Python 来写。
它的工作原理分为三步:
.web/ 文件夹中。左边的一个 Python 文件分成两路:界面函数被编译成 React 发送到浏览器,State 则留在服务器上,通过 ②→③ 的往返与界面保持同步。
讲师笔记 — 这三步在整个课程中会反复出现。先用一句话总结:“界面函数只执行一次,事件函数每次都执行”。到第3课讲解为什么不能用 if 时,再把这句话拿出来。
安装 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 及以上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 等端口。Ctrl + C。在浏览器中确认 — 用 --template blank 创建完成后打开 http://localhost:3000,应该能看到下面的界面。右上角的太阳图标是深色模式切换按钮。
这是准备课程时真实遇到的问题。学员很可能也会碰到,请提前提醒。
| 症状 | 原因 | 解决方法 |
|---|---|---|
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 restarted | Node 版本低于要求,Reflex 强制改用 Bun 运行时,而在这条路径上 React Router 重启失败 | 把 Node 升级到 22.22.0 及以上(例如 winget upgrade --id OpenJS.NodeJS.22) |
setx 设置的环境变量只对新打开的终端生效。如果用的是 VS Code 终端,需要把 VS Code 也重新打开。winget list --name Node 查看实际的包 ID。node -v 显示 22.22.0 及以上。uv run reflex run 后,浏览器中能看到默认界面。订阅新课时和新课程通知
本课程新增课时或推出后续课程时,我们会发邮件通知你。
问答
关于本课有任何疑问都可以在这里留言。所有语言版本页面的提问会汇集在一起。