标签: fastapi

在 FastAPI 中使用 Depends 比仅调用依赖函数/类有什么优势?

FastAPI通过自己的依赖解析机制提供了一种管理依赖的方法,比如数据库连接。

它类似于pytest夹具系统。简而言之,您在函数签名中声明您需要的内容,FastAPI 将调用您提到的函数(或类)并在调用处理程序时注入正确的结果。

是的,它确实缓存(在单个处理程序运行期间),但是我们不能仅使用@lru_cache装饰器并在每次运行时简单地调用这些依赖项来实现相同的功能吗?我错过了什么吗?

python dependency-injection fastapi

17
推荐指数
1
解决办法
7358
查看次数

在 FastAPI 中从根目录提供静态文件

我正在尝试让 FastAPI 与 Svelte 一起工作。我已经使用 Svelte 构建了静态文件,现在我尝试通过 FastAPI 提供它们。问题是构建的 Svelte 文件global.css从根目录引用,这意味着我无法将它们安装在子文件夹中。

相反,我必须将它们安装在 root 上:

app.mount("/", StaticFiles(directory="web/public", html=True), name="web")
Run Code Online (Sandbox Code Playgroud)

然而,这使得路由(函数装饰器)中定义的任何内容都无法访问。

是否可以同时定义静态文件函数?任何一个,

a) 路由优先,如果没有路由,它会尝试从静态目录中读取

b) 静态目录优先,我指定了一个排除路径,该路径改为路由

svelte fastapi

17
推荐指数
2
解决办法
7643
查看次数

FastAPI - Pydantic - 值错误引发内部服务器错误

我正在将 FastAPI 与 Pydantic 结合使用。

我的问题 - 我需要使用 Pydantic 引发 ValueError

from fastapi import FastAPI
from pydantic import BaseModel, validator
from fastapi import Depends, HTTPException

app = FastAPI()

class RankInput(BaseModel):

    rank: int

    @validator('rank')
    def check_if_value_in_range(cls, v):
        """
        check if input rank is within range
        """
        if not 0 < v < 1000001:

            raise ValueError("Rank Value Must be within range (0,1000000)")
            #raise HTTPException(status_code=400, detail="Rank Value Error") - this works But I am looking for a solution using ValueError
        return v

def …
Run Code Online (Sandbox Code Playgroud)

python python-3.x pydantic fastapi

17
推荐指数
2
解决办法
3万
查看次数

FastAPI python:如何在后台运行线程?

我正在使用 FastAPI 在 python 中创建一个服务器,并且我想要一个与我的 API 无关的函数,每 5 分钟在后台运行一次(例如从 API 检查内容并根据响应打印内容)

我尝试创建一个运行该函数的线程start_worker,但它不打印任何内容。

有谁知道该怎么做?

def start_worker():
    print('[main]: starting worker...')
    my_worker = worker.Worker()
    my_worker.working_loop() # this function prints "hello" every 5 seconds

if __name__ == '__main__':
    print('[main]: starting...')
    uvicorn.run(app, host="0.0.0.0", port=8000, reload=True)
    _worker_thread = Thread(target=start_worker, daemon=False)
    _worker_thread.start()
Run Code Online (Sandbox Code Playgroud)

python multithreading fastapi uvicorn

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

有没有办法在 FastAPI/OpenAPI 中拥有多个响应模型?

我正在编写一个应用程序,我需要根据逻辑有两组完全不同的响应结构。

有什么方法可以处理这个问题,以便我可以序列化、验证和返回两个不同的响应模型并反映在 OpenAPI JSON 中?

我正在使用 pydantic 来编写模型。

openapi pydantic fastapi

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

如何在 Heroku 中运行 UVICORN?

所以我已经想出了如何编写 fastAPI 并且我准备将我的脚本部署到我使用过 fastAPI ( https://fastapi.tiangolo.com/ ) 的heroku但是问题是当我向 heroku 发出请求时它只会返回:

<html>
  <head>
    <title>Internal Server Error</title>
  </head>
  <body>
    <h1><p>Internal Server Error</p></h1>

  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

这意味着脚本已打开,但我看不到错误,并且我会说在本地它完全正常。

我无法看到问题所在的任何日志,但是我想说我的问题可能是我不确定我的procfile是否正确,因为我根本没有编辑它而且我对此很陌生,我在这里请问我如何能够在heroku中运行我的fastapi脚本?

我所知道的是,为了能够运行脚本,您必须使用命令uvicorn main:app --reload,如果您这样做,它将无法工作等py main.py我做错了什么?

python heroku fastapi uvicorn

16
推荐指数
3
解决办法
5938
查看次数

fastapi依赖与中间件

我是 fastapi 新手。我使用过其他语言的多个 Web 框架,并发现了用于各种目的的中间件的通用模式。例如,如果我有一个想要进行身份验证的 API 路由,那么我会使用一个中间件来进行身份验证。如果我想增加传入请求,我会使用中间件。FastAPI 确实有中间件(文档中很小的一部分),但也有依赖项。我希望验证我的 API 路由,并开始寻找示例,我发现的所有示例都使用依赖项。建议采用什么方式(依赖项或中间件)来验证 API 路由?为什么?

python fastapi

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

uvicorn [fastapi] python 同时运行 HTTP 和 HTTPS

我正在尝试使用 SSL 运行 fastapi 应用程序。

我正在使用 uvicorn 运行该应用程序。

我可以使用 HTTP 在端口 80 上运行服务器,

if __name__ == '__main__':
    uvicorn.run("main:app", port=80, host='0.0.0.0', reload = True, reload_dirs = ["html_files"])
Run Code Online (Sandbox Code Playgroud)

要使用 HTTPS 运行端口,我执行以下操作:

if __name__ == '__main__':
    uvicorn.run("main:app", port=443, host='0.0.0.0', reload = True, reload_dirs = ["html_files"], ssl_keyfile="/etc/letsencrypt/live/my_domain/privkey.pem", ssl_certfile="/etc/letsencrypt/live/my_domain/fullchain.pem")
Run Code Online (Sandbox Code Playgroud)

我如何运行两者或简单地集成 https 重定向?

注意:这是在我不想使用 nginx 的服务器上进行的设置,我知道如何使用 nginx 来实现 https 重定向。

ssl http-redirect python-3.x fastapi uvicorn

16
推荐指数
2
解决办法
4万
查看次数

'synchronize_session=False' 在 Sqlalchemy 的更新函数中到底做了什么?它的最佳值是多少?

我们的 API 中有 CRUD 函数,它使用 FastAPI 和 SQLAlchemy。
对于更新功能,我们有以下代码:

def update_user(
    user_id: uuid.UUID,
    db: Session,
    update_model: UserUpdateModel,
) -> bool:
    query = (
        db.query(User)
        .filter(
            User.user_id == user_id,
        )
        .update(update_model, synchronize_session=False)
    )
    try:
        db.commit()
    except IntegrityError as e:
        if isinstance(e.orig, PG2UniqueViolation):
            raise UniqueViolation from e
    return bool(query)

Run Code Online (Sandbox Code Playgroud)

“synchronize_session=False”在这里到底是做什么的?
它的最佳价值是什么?假的还是获取的……?
如果我们不使用它,这很重要吗?

sqlalchemy fastapi

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

pydantic 从模型中排除多个字段

在 pydantic 中,有一种更干净的方法可以从模型中排除多个字段,例如:


class User(UserBase):
    class Config:        
        exclude = ['user_id', 'some_other_field']

Run Code Online (Sandbox Code Playgroud)

我知道以下有效。


class User(UserBase):

    class Config:       
        fields = {'user_id': {'exclude':True}, 
                   'some_other_field': {'exclude':True}
                 }
Run Code Online (Sandbox Code Playgroud)

但我一直在寻找像 django Rest Framework 这样更干净的东西,你可以在其中指定排除或包含的列表。

python model backend pydantic fastapi

16
推荐指数
3
解决办法
5万
查看次数