![](/img/trans.png)
[英]Store references to Dask Futures in a Flask/FastAPI Application
[英]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.