首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有可能将FastAPI实例安装到一个Flask应用程序上?

是否有可能将FastAPI实例安装到一个Flask应用程序上?
EN

Stack Overflow用户
提问于 2021-12-28 11:13:41
回答 2查看 416关注 0票数 1

我知道在FastAPI上安装一个烧瓶实例是可能的。这意味着所有发送到根URL的请求都由FastAPI处理,并且只将对指定的烧瓶URL的请求转发给它。有可能反过来这样做吗?我有一个网站,我已经建立了烧瓶,我想添加一个API到它来管理数据库从另一个应用程序。FastAPI有自动文档和验证,这使生活变得更容易了。我想把它装成这样的原因

如果不是,我是否可以用uvicorn单独托管它,并将以/api/开头的所有URL转发给它,并以某种方式返回它通过烧瓶返回的所有URL?

我之所以在这里混在一起而不是单独运行,是因为我在从烧瓶应用程序外部访问数据库时遇到了困难。

EN

回答 2

Stack Overflow用户

发布于 2021-12-28 15:02:56

我已经用两个独立的烧瓶应用程序完成了这个任务(请参阅这里)。

它可以与FastAPI实例一起工作。

票数 0
EN

Stack Overflow用户

发布于 2021-12-28 16:52:33

经过修修补补,我想出了一个解决办法。

我现在将烧瓶和FastAPI作为两个独立的应用程序运行。我添加了一条烧瓶路线,使其成为FastAPI应用程序的代理:

代码语言:javascript
复制
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

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

我通过添加以下代码解决了访问数据库时遇到的问题(由于不在会话中)。

代码语言:javascript
复制
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调用创建一个新会话,然后在调用完成后关闭它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70506231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档