我知道可以在 FastAPI 之上安裝一個燒瓶實體。這意味著所有發往根 URL 的請求都由 FastAPI 處理,并且只有對指定的flask URL 的請求才會轉發給它。是否有可能以相反的方式做到這一點?我有一個用 Flask 構建的網站,我想向其中添加一個 API 以從另一個應用程式管理資料庫。FastAPI 具有自動檔案和驗證功能,這讓生活變得更加輕松。我想以這種方式安裝它的原因
如果沒有,我可以用 uvicorn 單獨托管它并將所有以 /api/ 開頭的 URL 轉發給它,并以某種方式回傳它通過燒瓶回傳的任何內容嗎?
我在這里混合而不是單獨運行它們的原因是我無法從 Flask 應用程式外部訪問資料庫。
uj5u.com熱心網友回復:
我已經用兩個單獨的 Flask 應用程式完成了這項作業(請參閱此處)。
它可以與 FastAPI 實體一起使用。
uj5u.com熱心網友回復:
經過一番折騰,我找到了解決辦法。
我現在將 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
然后我運行 FastAPIuvicorn main:app --root-path api/以便前端知道在哪里可以找到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 呼叫創建一個新會話,然后在呼叫完成后將其關閉。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/400422.html
