簡體   English   中英

是否可以將 FastAPI 實例安裝到 Flask 應用程序上?

[英]Is it possible to mount an instance of FastAPI onto a Flask application?

我知道可以在 FastAPI 之上安裝 flask 的實例 這意味着所有發往根 URL 的請求都由 FastAPI 處理,只有發往指定 flask URL 的請求被轉發給它。 是否可以反過來這樣做? 我有一個使用 flask 構建的網站,我想在其中添加一個 API 以從另一個應用程序管理數據庫。 FastAPI 具有自動文檔和驗證功能,這讓生活變得更加輕松。 我想以這種方式安裝它的原因

如果沒有,我可以使用 uvicorn 單獨托管它並將所有以 /api/ 開頭的 URL 轉發給它,並以某種方式返回它通過 flask 返回的任何內容嗎?

我在這里混合而不是單獨運行它們的原因是我無法從 flask 應用程序外部訪問數據庫。

我已經使用兩個單獨的 Flask 應用程序完成了此操作(請參見此處)。

它可以與 FastAPI 實例一起使用。

經過一番折騰,我想出了一個解決方案。

我現在將 flask 和 FastAPI 作為兩個單獨的應用程序運行。 我添加了一條到 flask 的路由,使其充當 FastAPI 應用程序的代理:

API_URL = "http://127.0.0.1:8000/"

@views.route("/api/<path:rest>")
def api_redirect(rest):
    return requests.get(f"{API_URL}{rest}").content

然后我使用uvicorn main:app --root-path api/運行 FastAPI,以便前端知道在哪里可以找到openapi.json文件。

我通過添加以下代碼解決了訪問數據庫時遇到的問題(由於不在會話中)。

engine = create_engine(DB_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

models.db.metadata.create_all(bind=engine)

app = FastAPI()

def get_db():
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()


@app.get("/all-items", response_model=List[schemas.Item], tags=["items"])
def all_items(db: Session = Depends(get_db)):
    return db.query(models.Item).all()

這會為每個 API 調用創建一個新的 session,然后在調用完成后將其關閉。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM