Project Icon

reflex

使用纯Python构建高性能全栈Web应用框架

Reflex是一个纯Python全栈Web应用开发框架,支持开发者使用Python构建前后端,无需学习JavaScript。该框架易于上手且可扩展至复杂应用,提供快速部署功能。Reflex内置60多个组件,支持自定义组件开发和状态管理。它适用于快速原型设计和生产级应用,是开发现代Web应用的有力工具。

+ 正在搜索Pynecone?您来对地方了。Pynecone已更名为Reflex。+
Reflex Logo Reflex Logo

✨ 使用纯Python构建高性能、可定制的Web应用。几秒内即可部署。✨

PyPI版本 测试 版本 文档 Discord


English | 简体中文 | 繁體中文 | Türkçe | हिंदी | Português (Brasil) | Italiano | Español | 한국어 | 日本語 | Deutsch | Persian (پارسی)


Reflex

Reflex是一个用纯Python构建全栈Web应用的库。

主要特点:

  • 纯Python - 使用Python编写应用的前端和后端,无需学习JavaScript。
  • 完全灵活 - Reflex易于上手,同时也能扩展到复杂的应用。
  • 即时部署 - 构建完成后,可以通过单个命令部署您的应用,或在自己的服务器上托管。

查看我们的架构页面了解Reflex的工作原理。

⚙️ 安装

打开终端并运行(需要Python 3.8+):

pip install reflex

🥳 创建您的第一个应用

安装reflex的同时也会安装reflex命令行工具。

通过创建一个新项目来测试安装是否成功。(将my_app_name替换为您的项目名称):

mkdir my_app_name
cd my_app_name
reflex init

此命令会在您的新目录中初始化一个模板应用。

您可以在开发模式下运行此应用:

reflex run

您应该能在http://localhost:3000看到您的应用运行。

现在您可以修改my_app_name/my_app_name.py中的源代码。Reflex具有快速刷新功能,因此当您保存代码时,可以立即看到更改。

🫧 示例应用

让我们来看一个示例:创建一个围绕DALL·E的图像生成UI。为简单起见,我们只调用OpenAI API,但您可以将其替换为本地运行的ML模型。

 

DALL·E的前端封装,展示了生成图像的过程。

 

以下是创建此应用的完整代码。这全部在一个Python文件中完成!

import reflex as rx
import openai

openai_client = openai.OpenAI()


class State(rx.State):
    """应用状态。"""

    prompt = ""
    image_url = ""
    processing = False
    complete = False

    def get_image(self):
        """根据提示获取图像。"""
        if self.prompt == "":
            return rx.window_alert("提示为空")

        self.processing, self.complete = True, False
        yield
        response = openai_client.images.generate(
            prompt=self.prompt, n=1, size="1024x1024"
        )
        self.image_url = response.data[0].url
        self.processing, self.complete = False, True


def index():
    return rx.center(
        rx.vstack(
            rx.heading("DALL-E", font_size="1.5em"),
            rx.input(
                placeholder="输入提示..",
                on_blur=State.set_prompt,
                width="25em",
            ),
            rx.button(
                "生成图像", 
                on_click=State.get_image,
                width="25em",
                loading=State.processing
            ),
            rx.cond(
                State.complete,
                rx.image(src=State.image_url, width="20em"),
            ),
            align="center",
        ),
        width="100%",
        height="100vh",
    )

将状态和页面添加到应用程序中。

app = rx.App() app.add_page(index, title="Reflex:DALL-E")


## 让我们来分解一下。

<div align="center">
<img src="https://yellow-cdn.veclightyear.com/835a84d5/afe9f57e-87de-457b-b3a0-6e9a91edfc92.png" alt="解释DALL-E应用程序的后端和前端部分之间的差异。" width="900" />
</div>

### **Reflex UI**

我们从UI开始。

```python
def index():
    return rx.center(
        ...
    )

这个index函数定义了应用程序的前端。

我们使用不同的组件,如centervstackinputbutton来构建前端。组件可以相互嵌套以创建复杂的布局。你可以使用关键字参数来使用CSS的全部功能对它们进行样式设置。

Reflex提供了60多个内置组件来帮助你入门。我们正在积极添加更多组件,并且创建自己的组件也很容易。

状态

Reflex将你的UI表示为状态的函数。

class State(rx.State):
    """应用程序状态。"""
    prompt = ""
    image_url = ""
    processing = False
    complete = False

状态定义了应用程序中所有可以改变的变量(称为vars)以及改变它们的函数。

这里的状态由promptimage_url组成。还有布尔值processingcomplete,用于指示何时禁用按钮(在图像生成期间)以及何时显示生成的图像。

事件处理器

def get_image(self):
    """从提示中获取图像。"""
    if self.prompt == "":
        return rx.window_alert("提示为空")

    self.processing, self.complete = True, False
    yield
    response = openai_client.images.generate(
        prompt=self.prompt, n=1, size="1024x1024"
    )
    self.image_url = response.data[0].url
    self.processing, self.complete = False, True

在状态内,我们定义了称为事件处理器的函数,用于更改状态变量。事件处理器是我们在Reflex中修改状态的方式。它们可以响应用户操作而被调用,比如点击按钮或在文本框中输入。这些操作被称为事件。

我们的DALL·E应用程序有一个事件处理器get_image,用于从OpenAI API获取图像。在事件处理器中间使用yield将导致UI更新。否则,UI将在事件处理器结束时更新。

路由

最后,我们定义我们的应用程序。

app = rx.App()

我们从应用程序的根目录向索引组件添加一个页面。我们还添加了一个标题,它将显示在页面预览/浏览器标签中。

app.add_page(index, title="DALL-E")

你可以通过添加更多页面来创建多页应用程序。

📑 资源

📑 文档   |   🗞️ 博客   |   📱 组件库   |   🖼️ 画廊   |   🛸 部署  

✅ 状态

Reflex于2022年12月以Pynecone的名称推出。

截至2024年2月,我们的托管服务处于alpha阶段!在此期间,任何人都可以免费部署他们的应用程序。查看我们的路线图以了解计划中的内容。

Reflex每周都有新版本和新功能发布!请务必 :star: 星标和 :eyes: 关注此仓库以保持最新状态。

贡献

我们欢迎任何规模的贡献!以下是在Reflex社区中开始的一些好方法。

  • 加入我们的Discord:我们的Discord是获得Reflex项目帮助和讨论如何贡献的最佳场所。
  • GitHub讨论:这是讨论你想添加的功能或令人困惑/需要澄清的事情的好方法。
  • GitHub问题问题是报告错误的绝佳方式。此外,你可以尝试解决现有问题并提交PR。

我们正在积极寻找贡献者,无论你的技能水平或经验如何。要贡献,请查看CONTIBUTING.md

感谢所有的贡献者:

许可证

Reflex是开源的,根据Apache许可证2.0授权。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号