小编cyl*_*n86的帖子

fastapi - 从 main.py 导入配置

我是 fastapi 的新手,到目前为止它确实很棒,但我很难找到一种干净的方法将我的应用程序配置导入到另一个模块中。

编辑:我需要能够在运行单元测试时更改配置

这是我的目录树:

/app
| __init__.py
| /router
| | __init__.py
| | my_router.py
| /test
| | test_api.py
| config.py
| main.py
Run Code Online (Sandbox Code Playgroud)

这是我的main.py文件:

from functools import lru_cache

from fastapi import FastAPI

from .router import my_router
from . import config

app = FastAPI()

app.include_router(
    my_router.router,
    prefix="/r",
    tags=["my-router"],
)


@lru_cache()
def get_setting():
    return config.Settings(admin_email="admin@domain.com")


@app.get('/')
def hello():
    return 'Hello world'
Run Code Online (Sandbox Code Playgroud)

这里是router.py

from fastapi import APIRouter

from ..main import get_setting

router = APIRouter()

@router.get('/test')
def get_param_list(user_id: …
Run Code Online (Sandbox Code Playgroud)

python python-import python-3.x fastapi

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

为 Pydantic 模型字段指定不同的输入类型(以逗号分隔的字符串输入作为字符串列表)

使用 Pydantic,如何指定输入类型与其实际类型不同的属性?

例如,我有一个systems包含系统列表(因此是字符串列表)的字段,用户可以将此系统列表作为逗号分隔的字符串提供(例如"system1,system2");然后我使用验证器将该字符串拆分为字符串列表。

下面的代码正在执行此操作并且它有效,但类型提示是错误的,因为系统字段实际上是字符串列表,而不是字符串;验证器将原始字符串拆分为字符串列表。

我怎样才能解决这个问题?

import typing

from pydantic import BaseSettings, Field, validator


class Config(BaseSettings):
    systems: str = Field([], description="list of systems as a comma separated list (e.g. 'sys1,sys2')")

    @validator("systems")
    def set_systems(cls, v) -> typing.List[str]:
        if v == "":
            return []
        systems = list(filter(None, v.split(",")))
        return systems


if __name__ == "__main__":
    c = Config(**{"systems": "foo,bar"})
    print(c)
Run Code Online (Sandbox Code Playgroud)

python python-3.x pydantic

4
推荐指数
1
解决办法
1621
查看次数

标签 统计

python ×2

python-3.x ×2

fastapi ×1

pydantic ×1

python-import ×1