今天给大家介绍一个好玩的python web玩具框架 reflex,一个使用纯Python构建全栈web应用的库。
核心就是用python写一切,很多 Python 开发者,尤其是做数据分析、机器学习或者后端开发的,可能对前端的 HTML、CSS 和 JavaScript 不太熟悉。如果让他们用这些技术来做一个简单的网页 Demo,就会比较头疼。虽然现在有ai编程的加持,但是要写出一个漂亮的前端页面还是不太容易,而reflex就是这么一个框架,让我们只需要用 Python 就能完成 Web 应用的开发,完全不需要操心前端的那些“花哨”的东西。
Reflex 的优势:
纯 Python: 前端、后端、逻辑,全部用 Python 搞定,学习曲线平缓。
简单易用: 提供了一系列预置的组件,让你像搭积木一样构建用户界面。
快速开发: 内置了热重载功能,修改代码后页面会自动刷新,提高开发效率。
(类似的框架挺多的,gradio啥的都挺好用,不过今天咱主要聚焦于 reflex)
安装
python安装虽然有时候会有些依赖冲突的坑,但总的来说安装还是很方便快捷的,直接啪一下就行~
pip install reflex
初始化项目
reflex init
初始化命令之后,会自动开始安装node??这个时间可能会有点久,先喝杯茶~
node安装完成之后,再等一会,会让我们选择模板,这里我直接选择了1,ai模版~
给了一个链接,看起来是可以在线上调整来生成代码?
打开页面之后确实似乎是一个web 编辑器,但是我改了代码页面也没有看到任何变化呀?是我的魔法不到位吗。。
OK,那就选0呗。ctrl + c之后,重新选择了0
这下对了,在当前目录下面生成了一些文件。
运行
先直接run,看看效果再说。
reflex run
OK,又是一个漫长的等待,喝口水先。等待的时间我们先看看生成的代码是啥~
"""Welcome to Reflex! This file outlines the steps to create a basic app."""
import reflex as rx
from rxconfig import config
class State(rx.State):
"""The app state."""
...
def index() -> rx.Component:
# Welcome Page (Index)
return rx.container(
rx.color_mode.button(position="top-right"),
rx.vstack(
rx.heading("Welcome to Reflex!", size="9"),
rx.text(
"Get started by editing ",
rx.code(f"{config.app_name}/{config.app_name}.py"),
size="5",
),
rx.link(
rx.button("Check out our docs!"),
href="https://reflex.dev/docs/getting-started/introduction/",
is_external=True,
),
spacing="5",
justify="center",
min_height="85vh",
),
rx.logo(),
)
app = rx.App()
app.add_page(index)
写法和flask那些挺像的,实例化一个app,然后往app上面加页面。再看看他的原理图。
用户在浏览器前端与 UI 交互触发事件,这些事件被放入前端的事件队列并通过 WebSocket 发送到后端;后端的状态管理器根据事件信息找到对应的状态,执行相应的事件处理器来更新状态(包括基础变量和计算变量);状态更新完成后,后端通过 WebSocket 将更新后的状态发送回前端,前端根据这些更新来重新渲染 UI,最终用户在浏览器中看到最新的界面。
这个图看完了,发现还没启动,还在安装npm的东西,有点难顶了,在这里可以设置一下国内的npm源。修改刚开始自动生成的.web下的bunfig.toml,替换里面的源
[install]
registry = "https://registry.npmmirror.com"
不容易终于运行起来了。
(这里如果可以正常打开的话就可以忽略掉)这里有个坑,因为我是在Windows下用wsl跑的项目,默认的启动命令是localhost:3000,没办法在Windows打开3000,需要修改package.json文件,在dev这个命令里增加
-H 0.0.0.0
到这本篇暂时告一段落,我们完成了reflex的安装、配置、代码分析以及简单的运行,下一次我们基于reflex及一些模型api来实现一个简单的图片风格转换demo~
欢迎大家关注我的公众号,追更更轻松~