像Django一样开发FastAPI之: AppBoot settings使用

本文将介绍 AppBoot Settings 的工作原理及其使用方式。

原理说明

虽然 AppBoot Settings 的设计与 Django settings 相似,但它的实现方式有明显的不同。你可以将整个 settings.py 模块理解为 pydantic-settings 的一个配置类。因此,在 AppBoot 项目中,配置 settings.py 文件时,必须为每个配置变量明确指定类型注解,否则设置将无法生效。只有明确定义了类型注解,pydantic-settings 才能正确解析配置,从而更好地与 mypy 结合,帮助构建规范且稳定的 Python 项目。

内置默认配置项介绍

python 复制代码
from appboot.conf import DataBases, DictConfig
PROJECT_NAME: str = ''  # 项目名称
USE_TZ: bool = True  # 是否使用时区
TIME_ZONE: str = 'Asia/Shanghai'  # 时区配置
DATABASES: DataBases = DataBases(default=dict(url='sqlite+aiosqlite:///:memory:'))  # 数据库配置
FASTAPI: DictConfig = {}  # FastAPI 应用初始化参数配置
ALLOWED_HOSTS: list[str] = ['*']  # 允许的跨站请求域名,默认所有域名都允许
ROOT_URLCONF: str = ''  # 项目路由配置文件
DEFAULT_TABLE_NAME_PREFIX: str = ''  # 全局数据表名称前缀配置

如何覆盖不同环境下的配置项

由于 AppBoot 是通过 pydantic-settings 实现的,因此天然支持通过环境变量或配置文件加载设置。详细使用方法可以参考 pydantic-settings 文档。

配置覆盖的优先级如下:
settings.py < 文件配置 < 环境变量配置

例如,配置数据库连接如下:

python 复制代码
from appboot.conf import DataBases
DATABASES: DataBases = DataBases(
    default=dict(url=f'sqlite+aiosqlite:///db.sqlite3')
)

可以通过设置以下环境变量来覆盖数据库配置:

shell 复制代码
# 设置环境变量
export DATABASES='{"default": {"url": "sqlite+aiosqlite:///environment.sqlite3"}}'

或者使用嵌套属性:

shell 复制代码
# 设置环境变量
export DATABASES__default__url='sqlite+aiosqlite:///environment.sqlite3'

这两种方式都可以覆盖 settings.py 中的默认配置,因为环境变量的优先级最高。此外,AppBoot 默认支持从 .env 文件中加载配置, 配置的格式和环境变量一致。

相关推荐
颜颜yan_7 小时前
ESP-IDF 鸿蒙 PC 适配全记录:打通 Python、构建工具链与 ESP32-P4 固件生成
python·华为·harmonyos
言乐67 小时前
Python加速器4跨境网络加速器
运维·服务器·开发语言·网络·python
weixin_440730508 小时前
线程02-并发串行-互斥锁-Semaphore-Event
python·thread
张小凡vip9 小时前
python--爬虫--经验积累的遇到的坑
开发语言·爬虫·python
毕业设计7039 小时前
(免费领源码) 基于微信小程序的预制菜商城的设计与实现25172-java、PHP、python、C#、小程序、大数据、单片机、网络工程等)
vue.js·python·mysql·微信小程序·pycharm·微信开发者工具·推荐算法
xifangge20259 小时前
AGENTS.md 怎么写?涵盖 Java、Python、Vue、Go 的 8 套开箱即用模板
java·vue.js·python
大草原的小灰灰10 小时前
Python基础语法
开发语言·python
小葱炖豆腐11 小时前
python绘制excel折线图
python·excel·numpy·pandas·matplotlib
Ticnix11 小时前
MCP 实战:把工具层从 Agent 里彻底解耦
python·mcp
XZ-07000112 小时前
week4-1-figure画布
python