【在FastAPI应用中嵌入Gradio界面的实现方法】如何在有一个Fastapi应用的基础上,新加一个gradio程序

官网教程:https://www.gradio.app/guides/sharing-your-app#mounting-within-another-fast-api-app

实践:

import gradio as gr
from fastapi import FastAPI
from starlette.middleware.cors import CORSMiddleware

CUSTOM_PATH = "/gradio"

app = FastAPI()
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)


@app.get("/")
def read_main():
    return {"message": "This is your main app"}


# 定义当按钮被点击时执行的函数
def greet(text):
    return f"Hello, {text}!"


def create_gradio():
    # 使用 Blocks API 创建界面
    with gr.Blocks() as demo:
        gr.Markdown("### Enter your name to be greeted")
        # 创建一个文本输入框
        name_input = gr.Textbox(label="Your name")
        # 创建一个按钮
        greet_button = gr.Button("Greet")
        # 创建一个输出区域
        output = gr.Textbox(label="Greeting")

        # 当按钮被点击时,调用greet函数,并将结果显示在output中
        greet_button.click(fn=greet, inputs=name_input, outputs=output)

    return demo


if __name__ == '__main__':
    import uvicorn

    app = gr.mount_gradio_app(app, create_gradio(), path=CUSTOM_PATH)
    uvicorn.run(app)

在这里插入图片描述

介绍:
在Web应用开发中,将不同的工具和库结合起来实现更丰富的功能是一种常见的需求。本文将介绍如何在基于FastAPI框架构建的Web应用中嵌入Gradio界面,以实现用户友好的交互体验。

Gradio是一个强大的Python库,可用于快速构建机器学习模型的交互式界面。FastAPI则是一个快速(高性能)的web框架,用于构建API。将它们结合起来,可以实现更复杂和功能强大的Web应用程序。

步骤:

  1. 导入所需的库:
    在代码中首先导入所需的库,包括Gradio、FastAPI以及相关的中间件。

  2. 设置FastAPI应用:
    创建FastAPI应用实例,并配置跨域资源共享(CORS)中间件,以允许不同源之间的通信。

  3. 定义主页路由:
    创建一个简单的路由处理函数,用于主页请求的处理,并返回一个简单的消息,表示主页已成功加载。

  4. 定义Gradio界面:
    创建一个函数,用于定义Gradio界面。在这个函数中,使用Gradio的Blocks API创建界面元素,如文本框、按钮等,并定义按钮点击事件的处理函数。

  5. 将Gradio界面挂载到FastAPI应用中:
    使用Gradio提供的mount_gradio_app函数,将Gradio界面挂载到FastAPI应用中,并指定挂载路径。

  6. 启动应用:
    使用uvicorn或其他HTTP服务器启动FastAPI应用,以便用户可以访问并与Gradio界面交互。

代码优化:
在代码中已经实现了功能,但可以对其进行一些优化,以提高可读性和可维护性。例如,可以将路由处理函数和Gradio界面定义函数分离出来,使代码结构更清晰;可以添加注释来解释每个函数的作用和参数;可以使用更具描述性的变量名。

结论:
通过将Gradio界面嵌入到FastAPI应用中,我们可以轻松地实现一个交互式的Web应用程序,为用户提供友好的界面来与机器学习模型进行交互。这种组合使用不同库和工具的方法,可以为开发者提供更多的灵活性和创造性,以满足不同场景下的需求。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-26 18:12:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-26 18:12:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-26 18:12:03       87 阅读
  4. Python语言-面向对象

    2024-03-26 18:12:03       96 阅读

热门阅读

  1. ubuntu 22.04 LTS 内核从 5.15.0 升级到 6.6.0

    2024-03-26 18:12:03       42 阅读
  2. PHP学习笔记

    2024-03-26 18:12:03       32 阅读
  3. Spring Boot

    2024-03-26 18:12:03       38 阅读
  4. linux安装指定版本docker

    2024-03-26 18:12:03       43 阅读
  5. Python中,type() 和 isinstance() 的区别

    2024-03-26 18:12:03       44 阅读
  6. 12、Spring CLI中的角色使用

    2024-03-26 18:12:03       37 阅读
  7. leetcode ——匹配子序列的单词数

    2024-03-26 18:12:03       44 阅读
  8. Python如何查询es里的数据

    2024-03-26 18:12:03       32 阅读