精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

使用FastAPI整合Gradio和Django

人工智能
本文分享了一種整合 Gradio 和 Django 程序的方法,在這種方法下,Gradio 和 Django 可以使用同一個進程,使用相同的端口號對外服務,同時Gradio程序使用子目錄 /gradio 進行訪問,Django 程序使用根目錄 / 進行訪問。

大家好,我是每天分享AI應用的螢火君!

經常接觸機器學習的同學可能都接觸過Gradio這個框架,Gradio是一個基于Python的專門為機器學習項目創建的快速開發框架,可以讓開發者快速發布自己的模型給用戶測試,目前Huggingface上的機器學習項目都是基于Gradio對外提供服務的。

不過Gradio的目標是機器學習模型的快速演示,真正為用戶提供服務時,我們還有很多需要關注的方面,比如用戶的鑒權授權、消息通知、靜態頁面、SEO優化等等,這些使用Gradio有點捉襟見肘,我們還需要使用更加成熟的Web開發框架,比如Django這種。

但是我們初期可能已經用Gradio做了很多的功能,不想重寫這些東西,這時候就產生了集成Gradio到其它框架的需求。這篇文章就來分享如何將Gradio集成到成熟的Web框架Django,以方便后來者。

創建Django項目

這里假設我們已經有了一個Gradio的項目,將在這個項目中繼續創建一個Django項目。

創建 Django 項目

首先通過 pip 安裝 Django

pip install django

然后在程序的根目錄初始化Django項目的一些基礎文件:

django-admin startproject myproject
cd myproject

這里的 myproject 需要替換成你的 Django 項目名。

然后我們還要繼續創建 Django 應用,應用可以理解為模塊,比如項目下有管理模塊、用戶模塊、支付模塊和具體的業務單元模塊。每個應用都有自己的模型、視圖、模板和 URL 路由。

python manage.py startapp myapp

請將myapp改為你的應用名稱。

執行完這些命令之后,項目中將會增加一些Django的框架腳本。

創建 Django 頁面

有了Django的基礎腳本,然后就可以開發Web頁面了。

1個頁面涉及三個方面:視圖、路由和HTML模板,還是以 myapp 為例:

在 myapp/views.py 中創建一個視圖:

from django.shortcuts import render

def index(request):
    return render(request, 'index.html')

在 myapp/urls.py 中設置 URL 路由到這個視圖:

from django.urls import path
from .views import index

urlpatterns = [
    path('', index, name='index'),
]

在 myapp/templates/index.html 創建 HTML 模板:

<!DOCTYPE html>
<html>
<head>
    <title>Gradio in Django</title>
</head>
<body>
    <h1>Welcome to My App</h1>
</body>
</html>

然后我們就可以啟動程序,在瀏覽器訪問這個頁面了:

uvicorn myproject.wsgi:application --reload

啟動程序使用的是 uvicorn工具,myproject是項目的名稱,wsgi對應到myproject文件夾下的 wsgi.py。

集成Gradio到Django

準備一個Gradio項目

為了演示,這里準備一個Gradio的程序。

假設文件路徑為:gradio/app.py

import gradio as gr

def greet(name):
    return f"Hello {name}!"

# 定義 Gradio 接口
demo = gr.Interface(fn=greet, inputs="text", outputs="text")

整合 Gradio 和 Django

現在我們把 Gradio 集成到 Django 中,它們將在同一個進程中運行,對外使用一個端口號。Django 默認通過根目錄 / 進行訪問,Gradio則通過 /gradio 進行訪問。

這里走過一些彎路,有問題的方法就不講了,直接給出我的方案。

這里還要引入一個框架 FastAPI,我們將使用 FastAPI 來代理對 Gradio 和 Django 的訪問,所以其實不是將Gradio集成到Django,這個方法本質上是將 Gradio 和 Django 整合到一起。

打開 myproject/wsgi.py,這是 Django 項目的主文件:

import os
from django.core.wsgi import get_wsgi_application
from fastapi import Request, Response
from starlette.middleware.wsgi import WSGIMiddleware
import gradio as gr
from gradio.app import demo

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')

# 創建 FastAPI 應用
app = FastAPI()

# 掛載 Gradio 到FastAPI,注意這個path要和下邊中間件中的一致
app = gr.mount_gradio_app(app, demo, path="/gradio")

# 獲取 Django 的 WSGI 應用
django_app = get_wsgi_application()

# 注冊一個FastAPI中間件,實現
@app.middleware("http")
async def route_middleware(request: Request, call_next):
   
    # 如果路徑是 /gradio,則調用call_next,FastAPI框架會交給已經注冊的 Gradio程序 處理
    if request.url.path.startswith("/gradio"):
        return await call_next(request)
    
    # 否則交給Django處理
    response = Response()
    
    async def send(message):
        if message['type'] == 'http.response.start':
            response.status_code = message['status']
            response.headers.update({k.decode(): v.decode() for k, v in message['headers']})
        elif message['type'] == 'http.response.body':
            response.body += message.get('body', b'')  # 注意這里用 += 來累積響應體
            
    await WSGIMiddleware(django_app)(request.scope, request.receive, send)
    
    response.headers["content-length"] = str(len(response.body))
    return response

這段代碼的邏輯也比較簡單,先創建FastAPI應用,然后將Gradio程序掛載到FastAPI,這里使用的是Gradio自帶的mount_gradio_app方法,然后創建了一個FastAPI的中間件,對不同的路由使用不同的處理。

重點就在這個FastAPI中間件,它可以保證通過 /gradio 訪問到Gradio程序,通過 / 訪問到 Django 程序。

如果我們使用下面的這種方式來代理 Django,實測將不能通過 /gradio 訪問到Gradio程序,無論 Gradio 和 Django 誰先注冊。如果你的環境可以,歡迎留下你的各個 package 的版本。

app.mount("/", WSGIMiddleware(django_app))

靜態文件的訪問

因為靜態文件是每個Web程序幾乎避不開的,比如圖片、css、js等,所以這里特別提下。

在上邊的路由中間件中,除了 /gradio 會路由到Gradio程序,其它都會走Django進行處理,靜態文件也不例外。

這里假設靜態文件放在 static 目錄下。

打開 myproject/settings.py,這是 Django 項目的基礎設置文件,修改其中靜態文件的部分:

STATIC_URL = '/static/'
if DEBUG:
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, "static"),
    ]
else:
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')

打開 myproject/urls.py,修改其中的路由定義,增加 re_path 這一行。

urlpatterns = [
    re_path('^static/(?P<path>.*)', serve, {'document_root': settings.STATIC_ROOT}),
    path('', include('myapp.urls')),  # 包含 myapp 的 URL 配置
]

這樣可以在調測和生產環境都能正常訪問 static 目錄下的靜態文件,而不用再進行不同的設置。

總結

本文分享了一種整合 Gradio 和 Django 程序的方法,在這種方法下,Gradio 和 Django 可以使用同一個進程,使用相同的端口號對外服務,同時Gradio程序使用子目錄 /gradio 進行訪問,Django 程序使用根目錄 / 進行訪問。

因本人對 Django 和 Gradio 的了解有限,文中介紹的方法可能存在瑕疵,請謹慎使用。



責任編輯:武曉燕 來源: 螢火架構
相關推薦

2021-04-28 07:03:28

DjangoFlaskFastAPI

2023-10-09 18:17:52

Python語言Web

2025-09-10 08:03:10

2012-04-19 10:04:20

ibmdw

2025-06-16 07:55:29

2025-05-14 08:16:46

?Redis機器學習推薦模型

2024-07-25 08:58:16

GradioPython數據應用

2025-05-07 10:00:00

開發FastAPI日志

2020-06-04 17:38:49

PythonFastAPIWeb服務

2025-05-19 08:30:19

2023-03-27 15:07:27

PythonWeb 開發編程語言

2016-11-09 14:02:46

HiveHBase集成

2009-06-19 10:00:37

Struts和Spri

2017-04-19 22:30:26

LinuxNginxGunicorn

2025-08-13 08:41:50

2023-12-05 15:44:46

計算機視覺FastAPI

2025-05-12 10:02:05

2021-06-09 09:36:18

DjangoElasticSearLinux

2021-04-26 10:47:54

AJAXDjango前端

2025-07-09 02:11:00

點贊
收藏

51CTO技術棧公眾號

日韩亚洲欧美成人| 福利成人导航| 自拍偷拍欧美日韩| 亚洲欧美卡通另类91av| 欧美一区二区三区日韩视频| 欧美日韩综合精品| 久久草视频在线| 欧美96在线| 玖玖精品视频| 日韩精品视频观看| a级免费在线观看| 国产麻豆91视频| 日韩1区2区| 91极品美女在线| 欧美激情第一页在线观看| 国产精品午夜一区二区| 中文字幕中文字幕精品| 午夜精品福利在线| 国产伦精品一区二区三区| 最近中文字幕在线mv视频在线| 成人影院免费观看| 日韩激情一二三区| 国产一区二区三区欧美| 老司机午夜av| www.视频在线.com| 国产成人精品免费在线| 欧美疯狂性受xxxxx另类| 中文字幕第六页| 中文字幕伦理免费在线视频| 国产精品一二三四| 欧美高清视频一区二区| 黄色片网站免费| 福利一区二区免费视频| 国产精品乱码妇女bbbb| 成人免费在线视频网站| 国产67194| 涩爱av色老久久精品偷偷鲁 | 精品孕妇一区二区三区| 老司机免费视频一区二区| 色偷偷噜噜噜亚洲男人| 天天综合天天添夜夜添狠狠添| 久草中文在线| 国产亚洲视频系列| 国产区精品在线观看| 神马久久精品综合| 在线视频亚洲欧美中文| 黄色成人av在线| 美女一区视频| 6—12呦国产精品| 日韩综合在线| 亚洲日本中文字幕| 看看黄色一级片| 欧美色网在线| 一区二区视频在线| 九九九九九九精品| 成人黄色片在线观看| 国产美女一区| 色老头一区二区三区在线观看| 丰满大乳奶做爰ⅹxx视频| 影视一区二区三区| 亚洲va中文字幕| 亚洲国产成人精品无码区99| 黄色网址在线播放| 久久电影网电视剧免费观看| 欧美精品videos另类日本| 成人免费无码大片a毛片| 色8久久影院午夜场| 精品福利一区二区| 久久国产精品网| 2020国产在线| 1区2区3区精品视频| 国产免费一区二区| 中文字幕日本视频| 日本不卡一二三区黄网| 国内自拍欧美激情| 欧美视频一区二区在线| 欧美a级网站| 3atv在线一区二区三区| 男人操女人逼免费视频| 日本韩国一区| 国产乱码字幕精品高清av| 147欧美人体大胆444| 欧美人一级淫片a免费播放| 欧美区国产区| 日韩中文在线观看| 一区二区三区影视| 久久综合另类图片小说| 欧美一级欧美一级在线播放| 久久久久国产精品熟女影院| 另类一区二区| 在线精品视频一区二区三四| 国产午夜福利100集发布| 激情视频在线观看| 亚洲国产视频在线| 日韩电影免费观看在| 日本xxxx人| 国产成人av影院| 精品视频导航| 人妻视频一区二区三区| 久久久99精品久久| 久久久影院一区二区三区| 福利在线午夜| 久久精品视频网| 在线无限看免费粉色视频| 超碰在线国产| 一区二区三区.www| 久久久天堂国产精品| 麻豆传媒视频在线观看免费| 亚洲一区二区三区三| 男人天堂成人在线| 在线日韩成人| 日韩一中文字幕| 五月天综合激情网| 国产精品一国产精品k频道56| 国产成人精品免高潮费视频| 男人天堂av在线播放| 国产精品日本| 亚洲伊人第一页| 国产精品人人爽| 国产在线视频不卡二| 国产日韩欧美视频| 天堂av中文字幕| 97精品视频在线观看自产线路二| 狠狠色综合一区二区| 欧美jizzhd69巨大| 91福利在线看| 91玉足脚交白嫩脚丫| 久久精品青草| 欧美区二区三区| 日韩av在线天堂| 久久精品123| 国产精品久久一区主播| 亚洲综合精品在线| 国产制服丝袜一区| 日本一区不卡| 免费网站黄在线观看| 精品国产成人av| 国产精品日日摸夜夜爽| 久久影院资源站| 久久高清视频免费| 亚洲综合一二三| 国产传媒欧美日韩成人| 国产一区再线| 国产三级伦理在线| 日韩视频国产视频| 亚洲国产123| 麻豆一区二区三区| 亚洲欧洲免费无码| 青春草在线视频| 色婷婷国产精品| 黄大色黄女片18第一次| 精品一区91| 亚洲乱码一区av黑人高潮 | 国产清纯白嫩初高生在线观看91| 日韩一区免费观看| 欧美一级大黄| 日韩一区二区视频在线观看| 手机免费观看av| 欧美另类亚洲| 国产精品美女久久久久av福利| av片在线观看网站| 日韩午夜在线影院| 青青青在线视频| 日韩精品亚洲专区| 亚洲成人第一| 日韩五码电影| 亚洲美女激情视频| 国产污视频网站| 国产成人精品一区二| 国产乱子伦精品视频| 亚洲精选av| 午夜精品免费视频| 国产美女精品视频国产| 最新不卡av在线| 下面一进一出好爽视频| 亚洲午夜黄色| 成人激情在线播放| 四虎影院观看视频在线观看 | 美女视频黄免费的亚洲男人天堂| a级片在线免费看| 国产日韩亚洲欧美综合| 日韩av手机版| 午夜欧洲一区| 色综合男人天堂| 欧美 日韩 综合| 在线观看欧美黄色| 国产性xxxx| 99国产精品久| 午夜免费福利视频在线观看| 亚洲免费观看高清完整版在线观| 国产成人精品一区二区| 在线观看h网| 亚洲男人的天堂在线| 91成年人视频| 精品久久久久久亚洲国产300| 公肉吊粗大爽色翁浪妇视频| 国产中文字幕精品| 国产肥臀一区二区福利视频| 日韩欧美视频在线播放| 丁香五月网久久综合| dj大片免费在线观看| 欧美日韩一区在线| 一级片久久久久| 性高湖久久久久久久久| 一区二区三区在线视频111| 成人在线视频免费| 欧美华人在线视频| 国产在线视频福利| 日韩欧美在线综合网| 黑人精品无码一区二区三区AV| 成人免费一区二区三区在线观看| 精品无码在线视频| 国产一区二区三区不卡在线观看 | 九九国产精品视频| 妞干网在线观看视频| 欧美a级片视频| 成人国产精品一区| 这里有精品可以观看| 日韩精品小视频| 在线天堂中文字幕| 91麻豆成人久久精品二区三区| 777精品久无码人妻蜜桃| 99成人超碰| 69174成人网| 欧美色片在线观看| 久久精品成人欧美大片| 国产情侣激情自拍| 色噜噜狠狠成人中文综合| 免费网站看av| 亚洲人成影院在线观看| 性生活在线视频| 国产在线成人| 亚洲AV无码成人精品一区| 国内精品久久久久久99蜜桃| 国产精品美女在线| 日韩脚交footjobhd| 亚洲人在线视频| 欧美一区二区三区激情| 日韩欧美在线不卡| 国产一级做a爱免费视频| 不卡一区中文字幕| 999精品视频在线| 亚洲一区不卡| 国产二级片在线观看| 在线播放精品| 亚洲va久久久噜噜噜久久狠狠| 久久不卡日韩美女| 国产精品久久久久久久久久久久久 | 亚洲精品乱码久久久久久金桔影视 | www成人在线| 亚洲成av人片| 精品无码av在线| 久久男人中文字幕资源站| 黄大色黄女片18第一次| 日本va欧美va瓶| av免费网站观看| 美女一区二区三区| 分分操这里只有精品| 国产综合婷婷| 国产美女在线一区| 日韩一级精品| 在线成人性视频| 99久久久久| 日本中文字幕一级片| 午夜电影亚洲| 午夜精品美女久久久久av福利| 欧美丝袜一区| 国产专区一区二区| 香蕉久久精品日日躁夜夜躁| 欧美日韩国产三区| 欧美中文一区二区| 自拍偷拍一区二区三区| 欧美日韩午夜| 国产一区二区三区精彩视频| 日韩电影一区二区三区四区| 国产免费人做人爱午夜视频| 欧美色综合网| 大伊香蕉精品视频在线| 亚洲一区国产一区| 亚洲男人天堂色| 国产精品一区二区在线观看不卡| 日本一区二区三区在线免费观看| 成人午夜伦理影院| 红桃视频一区二区三区免费| 岛国av在线一区| 亚洲 小说 欧美 激情 另类| 成人国产免费视频| 久久久久久国产精品无码| 国产精品视频你懂的| 成年人av电影| 亚洲欧洲99久久| 久久这里只有精品免费| 欧美日韩一区二区精品| 日韩乱码人妻无码中文字幕| 色婷婷狠狠综合| 国产熟女一区二区三区五月婷 | 成人福利视频在线观看| 9l亚洲国产成人精品一区二三| 国产欧美日韩免费| 三级成人黄色影院| 成人天堂噜噜噜| 日韩高清三区| 在线无限看免费粉色视频| 国产精品久久久亚洲一区| 中文字幕22页| 91视频精品在这里| www.99re7| 在线观看日韩电影| 天天干天天做天天操| 日韩在线观看免费av| 最新欧美色图| 成人女人免费毛片| 久久精品不卡| 茄子视频成人免费观看| 久热精品视频| 久久久久久久人妻无码中文字幕爆| 成人自拍视频在线| 国产成人精品视频免费| 欧美日韩国产中字| 午夜精品久久久久久久91蜜桃| 精品久久久久香蕉网| 亚洲xxx在线| 亚洲高清av在线| 五月婷婷久久久| 亚洲男人7777| heyzo高清中文字幕在线| 国产在线观看不卡| 蜜桃精品wwwmitaows| 手机看片福利永久国产日韩| 亚洲茄子视频| 免费在线观看的毛片| www.在线欧美| 久久成人激情视频| 午夜亚洲福利老司机| 国产黄色片网站| 久久久精品日本| 日韩欧美激情| 在线免费观看成人网| 蜜乳av一区二区| 久久视频精品在线观看| 欧美午夜精品伦理| 91精品国产乱码久久久久| 国产一区二区三区欧美| gogo亚洲高清大胆美女人体| 久久久综合亚洲91久久98| 亚洲久久在线| 污污污www精品国产网站| 国产亚洲一二三区| 一级片在线观看免费| 亚洲美腿欧美激情另类| 中文字幕高清在线播放| 蜜桃狠狠色伊人亚洲综合网站| 国产一区二区三区成人欧美日韩在线观看| 日韩成人av影院| 亚洲一级二级在线| 国产91麻豆视频| 国产一区二区三区精品久久久| 在线女人免费视频| 欧美一区二区三区在线播放| 可以免费看不卡的av网站| 李宗瑞91在线正在播放| 91精品福利视频| 在线免费看av| 97婷婷涩涩精品一区| 欧美理伦片在线播放| 黄色a级片免费| 国产校园另类小说区| 夜夜躁日日躁狠狠久久av| 最近日韩中文字幕中文| 91精品网站在线观看| 91大学生片黄在线观看| 日韩精品一区第一页| 中文字幕美女视频| 欧美一级日韩免费不卡| 天堂av在线电影| 久久亚洲一区二区| 免费高清在线一区| 激情五月婷婷在线| 日韩成人在线视频网站| 亚州一区二区三区| 亚洲av综合色区| 99久久精品免费| 中文字幕 自拍偷拍| 亚洲精品一区中文字幕乱码| 性欧美freehd18| 97超碰在线视| 久久精品一区八戒影视| 国产精品九九九九| 97国产精品人人爽人人做| 成人国产精品一级毛片视频| 一卡二卡三卡四卡五卡| 欧美日韩激情视频8区| av一本在线| 国产一区二区三区黄| 免费在线看成人av| 久久午夜无码鲁丝片午夜精品| 亚洲欧美精品在线| 中文字幕视频精品一区二区三区| 无码人妻丰满熟妇区五十路百度| 亚洲男人天堂一区|