精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

阿v免费在线观看| 999视频在线| 精品少妇3p| 日韩欧美在线视频观看| 91xxx视频| 天堂网www中文在线| 久久精品久久99精品久久| 欧美精品久久久久久久久久| 精品人妻一区二区三区视频| 亚洲一区二区三区久久久| 午夜精品久久一牛影视| 亚洲不卡中文字幕| www.国产黄色| 人人精品人人爱| 97精品一区二区三区| av在线播放中文字幕| 久久男人av| 制服丝袜亚洲色图| 日韩中文字幕二区| 欧美色图天堂| 国产精品久久久久久久久图文区| 国产日本一区二区三区| 99久久久国产精品无码免费| 日韩专区欧美专区| 午夜精品久久久久久久白皮肤| 国产欧美小视频| 妖精一区二区三区精品视频| 日韩亚洲欧美高清| 男女无套免费视频网站动漫| 香蕉伊大人中文在线观看| 亚洲精品中文字幕乱码三区| 久中文字幕一区| 精品国产av 无码一区二区三区| 日韩二区三区在线观看| 97热在线精品视频在线观看| 久久99久久久| 国产精品videosex极品| 操91在线视频| 糖心vlog免费在线观看| 欧美一区电影| 这里精品视频免费| 亚洲成人黄色av| 啄木系列成人av电影| 日韩精品黄色网| 久久性爱视频网站| 里番精品3d一二三区| 精品国产露脸精彩对白| 国产人妖在线观看| 大伊香蕉精品在线品播放| 日韩欧美中文字幕精品| 日本特黄在线观看| 欧美高清hd| 欧美电视剧在线看免费| 午夜视频在线免费看| 亚洲精品影片| 欧美va在线播放| 野战少妇38p| 狠狠久久伊人| 亚洲女同性videos| 偷拍夫妻性生活| 精品国产一区二区三区| 最近2019年日本中文免费字幕| 亚洲精品国产精品国自| 四虎成人精品永久免费av九九| 色悠悠久久久久| 五月天婷婷色综合| 国产综合自拍| 热99在线视频| 亚洲综合精品视频| 国产精品 欧美精品| 国产精品毛片一区视频| 日韩毛片在线一区二区毛片| 国产日韩欧美制服另类| 亚洲永久一区二区三区在线| av超碰免费在线| 婷婷国产在线综合| 欧美伦理视频在线观看| 亚洲ww精品| 亚洲成av人片在线观看香蕉| 30一40一50老女人毛片| 日韩成人精品一区| 色综合天天综合网国产成人网 | 国产成人av| 中文字幕精品在线视频| 欧美 日韩 国产 一区二区三区| 欧美成人国产| 欧美有码在线视频| 91中文字幕在线播放| 成人av电影在线| 日韩精品一线二线三线| 26uuu亚洲电影在线观看| 富二代精品短视频| 亚洲欧美手机在线| 老牛影视av一区二区在线观看| 中文字幕少妇一区二区三区| 国产亚洲精品久久777777| 玖玖视频精品| 国产精品二区三区| 91ph在线| 午夜在线电影亚洲一区| 婷婷免费在线观看| 日韩动漫一区| 久久成人在线视频| 久久精品视频2| 国产不卡在线播放| 涩涩涩999| zzzwww在线看片免费| 欧美精品一卡两卡| 公侵犯人妻一区二区三区| 你懂的亚洲视频| 国产精品极品在线| 天天干天天色天天| 一区二区三区精品在线观看| 超碰在线97免费| 日韩欧美美女在线观看| 久久高清视频免费| 艳妇乳肉豪妇荡乳av| 91免费视频大全| 男人天堂av片| 国产精品麻豆| 这里只有视频精品| 国产免费av一区二区| 国产精品一色哟哟哟| 日韩三级电影网站| a欧美人片人妖| 亚洲第一页在线| 在线观看成人毛片| 国产综合色在线| 一本色道婷婷久久欧美| 123成人网| 亚洲视频专区在线| 最近免费中文字幕大全免费版视频| 成人午夜激情片| av 日韩 人妻 黑人 综合 无码| 久久久久毛片| 中文字幕免费国产精品| 欧美日韩a v| 26uuu欧美| 国产精品宾馆在线精品酒店| 日本午夜精品| 2019中文在线观看| 青青草在线播放| 欧美性猛交丰臀xxxxx网站| 中文字幕乱码一区| 国产欧美日韩亚洲一区二区三区| 国产一区二区三区高清视频| 白白色在线观看| 精品国产91乱码一区二区三区 | 色综合av在线| 蜜桃传媒一区二区亚洲av | 182午夜在线观看| 国产一卡不卡| 国产精品久久久久久久久影视| 国产三级在线免费| 欧美性欧美巨大黑白大战| 99在线视频免费| 久久激五月天综合精品| 中国一级黄色录像| 国产厕拍一区| 日本成人精品在线| 97在线观看免费观看高清 | 亚洲福利视频一区| 黄色网址在线视频| 免费视频一区二区三区在线观看| 欧美大香线蕉线伊人久久国产精品 | 992kp快乐看片永久免费网址| 国产一区网站| 国产精品一区二区女厕厕| 黄a在线观看| 欧美tickling网站挠脚心| 99热国产在线观看| 亚洲国产精品精华液ab| 亚洲欧美一区二区三区不卡| 亚洲国产一区二区三区a毛片 | 免费黄色在线视频网站| 欧美三级中文字幕| 青青青在线免费观看| av午夜一区麻豆| 色婷婷狠狠18| 欧美日韩综合| 欧美在线3区| www久久久| 欧美一级大片视频| 精品欧美色视频网站在线观看| 精品人在线二区三区| 中文字幕黄色片| 亚洲美女少妇撒尿| 亚洲做受高潮无遮挡| 国产在线精品一区二区三区不卡 | 精品国产在天天线2019| 无码免费一区二区三区| 亚洲九九爱视频| 亚洲成人网在线播放| 国产精品1区2区| 国产精品无码av无码| 欧美不卡在线| 亚洲国产精品一区二区第一页| jizz性欧美23| 国产精品亚洲片夜色在线| 国产精品69xx| 久久国产一区二区三区| 你懂的视频在线观看| 欧美一区二区在线免费播放| 无码人妻av免费一区二区三区 | 色一情一乱一区二区| 午夜黄色小视频| 91精品黄色片免费大全| 亚洲欧美一区二区三区在线观看| 一区二区三区四区五区视频在线观看 | 欧美成年人视频网站| 国产一区二区三区福利| 精品盗摄一区二区三区| 一区二区三区精| 色欧美片视频在线观看| 日韩福利片在线观看| 亚洲欧洲综合另类| 高清国产在线观看| 99精品久久只有精品| www.美色吧.com| 国产一区二区在线电影| 午夜在线观看av| 久久久国产精品一区二区中文| 国产av熟女一区二区三区| 无码一区二区三区视频| 视频一区视频二区视频三区视频四区国产 | 日本公妇乱淫免费视频一区三区| 国产精品调教视频| 91在线观看免费高清完整版在线观看| av成人免费| 国产mv久久久| 日韩成人动漫| 日本韩国在线不卡| 亚洲人体视频| 51色欧美片视频在线观看| 成人影院在线视频| 久久久久久久久久久亚洲| 七七久久电影网| 欧美激情18p| 免费污视频在线观看| 欧美激情亚洲综合一区| 成人女同在线观看| 国内精品久久久久久影视8| 久久亚洲资源| 97香蕉久久夜色精品国产 | 国产精品一区二区久久| 国产原创一区| 国产日韩欧美91| 大胆国模一区二区三区| 亚洲mm色国产网站| 精品国产三级| 鬼打鬼之黄金道士1992林正英| 57pao国产一区二区| 国产福利久久| 国产精品极品在线观看| 精品乱码一区| 欧美人与拘性视交免费看| 欧美日韩精品免费观看| 成人免费看片39| 在线不卡日本| 好看的av在线不卡观看| 国产精品999视频| 美女久久网站| 欧美成人乱码一二三四区免费| 精品亚洲porn| 国产午夜在线一区二区三区| 91丝袜美腿高跟国产极品老师| 一级黄色性视频| 中文字幕一区二区视频| 久久亚洲成人av| 岛国精品视频在线播放| 中文字幕av免费观看| 欧美一级高清片在线观看| 五月婷婷综合久久| 中文字幕在线日韩 | 国产成人精品视频在线| 亚洲伦理网站| 精品国产乱码久久久久久丨区2区| 精品中文字幕一区二区三区av| 亚洲免费精品视频| 欧美深夜福利| 日本成人在线免费视频| 国产精品一区在线观看你懂的| 中文字幕日韩三级片| 中文字幕电影一区| 麻豆chinese极品少妇| 欧美性xxxxx极品娇小| 97在线播放免费观看| 亚洲国产精品人久久电影| 91在线直播| 久久久久成人精品| 国产精品亚洲成在人线| 精品国一区二区三区| 天堂va欧美va亚洲va老司机| 91亚洲精品一区二区乱码| 男人av资源站| 色先锋aa成人| 好吊色视频一区二区| 在线播放国产一区二区三区| 草草影院在线| 国产一区二区色| 日本午夜精品久久久| a级网站在线观看| 日韩黄色片在线观看| 91九色蝌蚪porny| 自拍偷拍亚洲综合| 亚洲大尺度在线观看| 亚洲国产精品久久精品怡红院| 97超碰人人在线| 热99精品里视频精品| 超碰成人97| 三级在线免费观看| 男女男精品视频网| 黄瓜视频污在线观看| 亚洲永久精品大片| 国产精品视频a| 亚洲性生活视频在线观看| 两个人看的在线视频www| 岛国一区二区三区高清视频| 91精品国产福利在线观看麻豆| 日本va中文字幕| 99久久精品免费看| 精品无码一区二区三区电影桃花| 91精品国产综合久久久蜜臀粉嫩 | 中文字幕日韩精品在线| 亚洲黄色免费看| 久久福利电影| 亚洲国产导航| 日韩黄色一区二区| 亚洲欧美日韩久久精品| 91高潮大合集爽到抽搐| 正在播放国产一区| 素人一区二区三区| 日本在线成人一区二区| 视频一区欧美日韩| 亚洲一区二区三区蜜桃| 一本色道久久综合亚洲aⅴ蜜桃 | 国产校园另类小说区| 中文字幕一区在线播放| 亚洲精品在线视频| 26uuu亚洲电影| 欧美日韩国产精品一卡| 久久福利精品| 国精产品一区二区三区| 色激情天天射综合网| 国产69久久| 国产精品一区二区久久精品| 久久一区二区中文字幕| 成人性生交免费看| 亚洲视频一区二区免费在线观看| 国产精品国产精品国产专区| 美日韩精品免费视频| 玖玖精品一区| 99国产精品白浆在线观看免费| 国产a精品视频| 少妇一级淫片免费放中国 | 日本在线不卡一区| 亚洲一级片在线播放| 欧美高清视频在线高清观看mv色露露十八| 欧美三级黄网| 成人在线视频网站| 欧美三级午夜理伦三级中文幕| 中文字幕一区二区人妻电影丶| 精品人伦一区二区三区蜜桃网站| 日本在线丨区| 国产精品永久在线| 欧美.www| 丝袜美腿中文字幕| 欧美在线短视频| 在线看福利影| 精品一区久久久久久| 日韩高清不卡在线| 国产黄在线免费观看| 亚洲国产成人精品久久| 影视一区二区三区| 黄频视频在线观看| 成人av综合一区| 日本视频www色| 欧美精品在线免费观看| 香蕉视频一区二区三区| 午夜剧场高清版免费观看| 亚洲夂夂婷婷色拍ww47| 成人在线免费视频| 97中文在线| 日本午夜一区二区| 久久精品一级片| 亚洲天堂男人天堂| 日韩欧美中文在线观看| 粉嫩虎白女毛片人体| 亚洲一区在线电影| 国产福利小视频在线观看| 999日本视频| 日日摸夜夜添夜夜添国产精品| 欧美成人精品欧美一级私黄| 亚洲欧美国产精品va在线观看| 国产精品视频一区二区三区| 黄色影院一级片| 亚洲蜜臀av乱码久久精品蜜桃| 国产综合在线观看| 国产伦理一区二区三区| 毛片av一区二区|