Python开发者福音:只懂Python?用Reflex也能构建全栈Web应用,无需HTML、CSS、JavaScript

技术

Aitrainee | 公众号:AI进修生

🕸️ 纯 Python 开发的 Web 应用🐍,使用 Python 创建高效且可自定义的网页应用程序,几秒钟内即可部署。

picture.image

Hi,这里是Aitrainee,欢迎阅读本期新文章。

厌倦了 在 Python Web 开发中处理 JavaScript 框架?

今天我们介绍 Reflex,这是一个革命性的框架,可让你使用纯 Python 编写全栈 Web 应用程序!Reflex 利用 Python 的强大功能实现后端逻辑和前端 UI 组件,从而简化你的开发流程。

Reflex对那些只懂Python但想构建Web应用的开发者来说是一个非常有吸引力的工具。

Reflex 不会涉及HTML、CSS、Bootstrap、Tailwind或JavaScript,但仍能实现像按钮和互动功能。

另一方面Reflex继承了SQL Model和SQL Alchemy的很多特性,因此所有的开发工作都可以用Python完成,且前后端无缝衔接。

Reflex

Reflex 是一个纯Python开发的全栈web应用框架。

主要特点包括:

  • 纯Python编程 - 前后端代码均使用Python编写,无需掌握JavaScript。
  • 高灵活性 - Reflex简单易学,同时支持开发复杂应用。
  • 快速部署 - 构建完成后,只需一个命令即可部署应用;您也可以选择在自己的服务器上托管。

下面提供官方的 文档介绍、相关资源、部署教程 等,进一步支撑你的行动,以提升本文的帮助力。

⚙️ 安装

在终端中运行以下命令(需要 Python3.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 中修改代码,保存后即可看到实时变化。

🫧 示例

以下是一个示例:创建一个使用 DALL·E 进行图像生成的应用。为了简单起见,我们只使用 OpenAI API,但您可以使用本地机器学习模型替代。

picture.image

以下是完整的示例代码,只需一个 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
         
        not
         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"
        )
      
    

逐步解析

picture.image

Reflex UI

从 UI 开始:


      
      
          

        def
         
        index
        ():
          

            
        return
         rx
        .
        center
        (
          

                
        ...
          

            
        )
      
    

这个 index 函数定义了应用的前端界面。

我们使用 center, vstack, input, 和 button 等组件构建前端,组件可以嵌套,形成复杂布局。可以通过关键字参数使用完整的 CSS 功能。

Reflex 提供 60+ 内置组件 帮助您快速开发应用。我们会不断添加新组件,您也可以 创建自定义组件。

State

Reflex 使用 State 管理 UI 渲染。


      
      
          

        class
         
        State
        (
        rx
        .
        State
        ):
          

            
        """应用状态."""
          

            prompt 
        =
         
        ""
          

            image\_url 
        =
         
        ""
          

            processing 
        =
         
        False
          

            complete 
        =
         
        False
      
    

State 定义了所有可能会变化的变量(vars)以及可以更改这些变量的函数。

在这个示例中,State 包含 promptimage_url。另外有两个布尔值 processingcomplete,用于显示加载进度和图像生成状态。

事件处理器


      
      
          

        def
         
        get\_image
        (
        self
        ):
          

            
        """根据提示生成图像."""
          

            
        if
         
        not
         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
      
    

在 State 中,我们定义了事件处理器,用于改变状态变量。事件处理器用于响应用户操作,例如点击按钮或在文本框中输入内容。

DALL·E 应用中,get_image 事件处理器从 OpenAI API 获取图像。使用 yield 关键字可以在事件处理器运行过程中更新 UI。

路由

最后,定义应用:


      
      
          

        app 
        =
         rx
        .
        App
        ()
      
    

我们添加了一个从应用根目录到 index 组件的路由,并设置了页面标题:


      
      
          

        app
        .
        add\_page
        (
        index
        ,
         title
        =
        "DALL-E"
        )
      
    

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

希望这篇文章对你有帮助,感谢阅读!

视频教程

https://www.youtube.com/watch?v=ITOZkzjtjUA

知音难求,自我修炼亦艰

抓住前沿技术的机遇,与我们一起成为创新的超级个体

(把握AIGC时代的个人力量)

picture.image

点这里👇关注我,记得标星哦~

一键三连「分享」、「点赞」和「在看」

科技前沿进展日日相见 ~

picture.image

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
VikingDB:大规模云原生向量数据库的前沿实践与应用
本次演讲将重点介绍 VikingDB 解决各类应用中极限性能、规模、精度问题上的探索实践,并通过落地的案例向听众介绍如何在多模态信息检索、RAG 与知识库等领域进行合理的技术选型和规划。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论