标签: fastapi

在 Azure 应用服务上部署 FastAPI 和 uvicorn

我想将一个简单的 FastAPI/uvicorn 部署到 Azure 应用程序服务上。

每次部署时,一切似乎都运行顺利,但当我输入 Web 应用程序的 URL 时,我会收到以下错误消息:

“错误信息

在我的本地机器上,uvicorn 工作正常。在我的网络服务上,我运行 python 3.7 和 fastapi 0.62.0。

每次部署时,我都会启动一个名为startup.sh的文档,其中仅包含一行代码:

python -m uvicorn main:app --host 0.0.0.0 --port 80

非常感谢帮助!

deployment azure azure-web-app-service fastapi uvicorn

10
推荐指数
2
解决办法
1万
查看次数

在异步环境中缓存结果

我正在 FastAPI 端点中工作,该端点进行 I/O 绑定操作,该操作是异步的以提高效率。但是,这需要时间,所以我想缓存结果以在一段时间内重复使用。

我目前有这个:

from fastapi import FastAPI
import asyncio

app = FastAPI()

async def _get_expensive_resource(key) -> None:
    await asyncio.sleep(2)
    return True

@app.get('/')
async def get(key):
    return await _get_expensive_resource(key)

if __name__ == "__main__":
    import uvicorn
    uvicorn.run("test:app")
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用该cachetools包来缓存结果,并且我尝试了如下操作:

import asyncio
from cachetools import TTLCache
from fastapi import FastAPI
  
app = FastAPI()

async def _get_expensive_resource(key) -> None:
    await asyncio.sleep(2)
    return True

class ResourceCache(TTLCache):
    def __missing__(self, key):
        loop = asyncio.get_event_loop()
        resource = loop.run_until_complete(_get_expensive_resource(key))
        self[key] = resource
        return resource

resource_cache …
Run Code Online (Sandbox Code Playgroud)

python caching python-asyncio fastapi nest-asyncio

10
推荐指数
1
解决办法
1万
查看次数

fastapi:将 sqlalchemy 数据库模型映射到 pydantic geojson 功能

我刚刚开始使用 FastAPI、SQLAlchemy、Pydantic,我正在尝试构建一个简单的 API 端点,以将 postgis 表中的行作为 geojson 特征集合返回。

这是我的sqlalchemy模型:

class Poi(Base):
    __tablename__ = 'poi'

    id = Column(Integer, primary_key=True)
    name = Column(Text, nullable=False)
    type_id = Column(Integer)
    geometry = Column(Geometry('POINT', 4326, from_text='ST_GeomFromEWKT'),
                      nullable=False)
Run Code Online (Sandbox Code Playgroud)

使用的geojson_pydantic相关pydantic型号有:

from geojson_pydantic.features import Feature, FeatureCollection
from geojson_pydantic.geometries import Point
from typing import List

class PoiProperties(BaseModel):
    name: str
    type_id: int

class PoiFeature(Feature):
    id: int
    geometry: Point
    properties: PoiProperties

class PoiCollection(FeatureCollection):
    features: List[PoiFeature]
Run Code Online (Sandbox Code Playgroud)

期望的输出:

理想情况下,我希望能够检索并返回数据库记录,如下所示:

def get_pois(db: Session, skip: int = 0, limit: int …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy geojson pydantic fastapi

10
推荐指数
1
解决办法
2923
查看次数

FastAPI 中我们可以接收的上传文件的最大大小是多少?

我试图计算出我的客户端可以上传的最大文件大小,以便我的 python fastapi 服务器可以毫无问题地处理它。

python http backend server-side fastapi

10
推荐指数
1
解决办法
2万
查看次数

fastapi + sqlalchemy + pydantic ?如何处理多对多关系

我有editors 和articles。许多编辑可能与许多文章相关,并且许多文章可能同时有许多编辑。

\n

我的数据库表是

\n
    \n
  • 文章
  • \n
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
ID主题文本
1新年假期今年...等等等等
\n
\n
    \n
  • 编辑
  • \n
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
ID姓名电子邮件
1约翰·史密斯一些@电子邮件
\n
\n
    \n
  • 编辑文章关系
  • \n
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n
编辑ID文章编号
11
\n
\n

我的模型是

\n
from sqlalchemy import Boolean, Column, Integer, String, ForeignKey\nfrom sqlalchemy.orm import relationship\n\nfrom database import Base\n\nclass Editor(Base):\n    __tablename__ = "editor"\n\n    id = Column(Integer, primary_key=True, index=True)\n    name = Column(String(32), unique=False, index=False, nullable=True)\n    email = Column(String(115), …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy pydantic fastapi

10
推荐指数
1
解决办法
2万
查看次数

是否可以为 FastApi 添加 uvicorn 日志的响应时间?

我的记录器看起来像这样:

log_config = {
    "version": 1,
    "disable_existing_loggers": True,
    "formatters": {
        "default": {
            "()": "uvicorn.logging.DefaultFormatter",
            "fmt": "%(asctime)s::%(levelname)s::%(name)s::%(filename)s::%(funcName)s::%(message)s",
            "datefmt": "%Y-%m-%dT%H:%M:%S%z",
            "use_colors": False,
        },
        "access": {
            "()": "uvicorn.logging.AccessFormatter",
            "datefmt": "%Y-%m-%dT%H:%M:%S%z",
            "fmt": '%(asctime)s::%(levelprefix)s %(client_addr)s - "%(request_line)s" %(msecs)d %(status_code)s',
            "use_colors": False,
        },
    },
    "handlers":
    {
        "default":
        {
            "formatter": "default",
            "class": 'logging.FileHandler',
            "filename": CONFIG[SECTION]["default"]
        },
        "access":
        {
            "formatter": "access",
            "class": 'logging.FileHandler',
            "filename": CONFIG[SECTION]["access"]
        },
    },
    "loggers":
    {
        "uvicorn": {"handlers": ["default"], "level": "INFO", "propagate": False},
        "uvicorn.access": {"handlers": ["access"], "level": "INFO", "propagate": False},
    }
}
Run Code Online (Sandbox Code Playgroud)

启动配置:

uvicorn.run(
    app="app.main:app", …
Run Code Online (Sandbox Code Playgroud)

python logging fastapi uvicorn

10
推荐指数
1
解决办法
2347
查看次数

ModuleNotFoundError:没有名为“fastapi”的模块

这是我的文件结构和requirements.txt:

这是我的文件结构和requirements.txt

得到ModuleNotFoundError,任何帮助将不胜感激。

主要.py

from fastapi import FastAPI
from .import models
from .database import engine
from .routers import ratings


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


app = FastAPI()


app.include_router(ratings.router)

Run Code Online (Sandbox Code Playgroud)

python fastapi modulenotfounderror

10
推荐指数
2
解决办法
6万
查看次数

FastAPI - 在 swagger 中添加路径参数的描述

想象一下有一个这样的应用程序:

from fastapi import FastAPI

app = FastAPI()


@app.get("/items/{item_id}")
async def read_item(item_id: int):
    return {"item_id": item_id}
Run Code Online (Sandbox Code Playgroud)

如何item_id在 swagger 中添加路径参数的描述?

fastapi

10
推荐指数
1
解决办法
5313
查看次数

POST 请求响应 422 错误 {'detail': [{'loc': ['body'], 'msg': 'value 不是有效的 dict', 'type': 'type_error.dict'}]}

即使正在发送有效的请求,我的POST请求仍然会失败并收到响应。我正在尝试创建一个网络应用程序,该应用程序接收上传的带有各种遗传标记的文本文件,并将其发送到张量流模型以进行癌症生存预测。可以在此处找到 github 项目的链接。422JSON

这是POST请求:

 df_json = dataframe.to_json(orient='records')
 prediction = requests.post('http://backend:8080/prediction/', json=json.loads(df_json), headers={"Content-Type": "application/json"})
Run Code Online (Sandbox Code Playgroud)

这是 pydantic 模型以及 API 端点:

class Userdata(BaseModel):
RPPA_HSPA1A : float
RPPA_XIAP : float
RPPA_CASP7 : float
RPPA_ERBB3 :float
RPPA_SMAD1 : float
RPPA_SYK : float
RPPA_STAT5A : float
RPPA_CD20 : float
RPPA_AKT1_Akt :float
RPPA_BAD : float
RPPA_PARP1 : float
RPPA_MSH2 : float
RPPA_MSH6 : float
RPPA_ACACA : float
RPPA_COL6A1 : float
RPPA_PTCH1 : float
RPPA_AKT1 : float
RPPA_CDKN1B : float …
Run Code Online (Sandbox Code Playgroud)

python http-post pydantic fastapi

10
推荐指数
1
解决办法
2万
查看次数

FastAPI - 我应该异步记录吗?

我有一个使用 FastAPI 编写的 python Web 应用程序(通过 uvicorn 运行)。在我的应用程序中,我使用的是标准logging模块,该模块使用TimedRotatingFileHandler. 由于我正在登录文件,因此我担心性能。假设我在一个函数中有 3 条日志消息,每次调用端点时都会调用该函数/test。现在想象 1000 个客户端/test同时请求 - 即向日志文件写入 3000 次。

我担心这会影响应用程序的性能,因为 IO 任务非常耗时。我应该使用某种形式的异步日志记录吗?也许打开一个新线程来写入文件?我尝试用谷歌搜索答案,但没有找到标准化的方法。那么它还需要吗?如果是,我应该如何处理这个问题?谢谢!

python io logging fastapi uvicorn

10
推荐指数
1
解决办法
3192
查看次数