今天给大家介绍一个好玩的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~

欢迎大家关注我的公众号,追更更轻松~

Snipaste_2024-12-07_11-05-00.png