FastAPI 配置文件
准备使用Vue + FastAPI开发一套后台管理系统,记录自己使用FastAPI的技术点。
配置文件目录
|____core // 项目存放一些重要的文件
| |______init__.py
| |____config // 配置文件夹
| | |______init__.py // 根据虚拟环境导入不同配置
| | |____development_config.py // 开发配置
| | |____production_config.py // 生成配置
配置文件
使用第三方依赖库pydantic
验证配置文件合法性。
pydantic
官方文档 https://pydantic-docs.helpmanual.io/
github地址 https://github.com/samuelcolvin/pydantic
需要安装依赖pip install pydantic
from pydantic import BaseSettings
发现FastAPI作者 tiangolo 正在写一个SQLAlchemy models自动生成Pydantic models的工具
github地址 https://github.com/tiangolo/pydantic-sqlalchemy
区分生产和开发
我这是一种最为直白简单的方式,区分生产和开发环境, 缺点是所有的配置都写在代码里面了。
import os
# 获取环境变量
env = os.getenv("ENV", "")
if env:
# 如果有虚拟环境 则是 生产环境
print("----------生产环境启动------------")
from .production_config import settings
else:
# 没有则是开发环境
print("----------开发环境启动------------")
from .development_config import settings
还有一种了,就是就是配置文件固定读取一个目录下文件如/etc/conf/fast_admin_conf.py
或者.ini文件
如果能读取说明为生产环境,读取不到则说明为开发环境。
指定文件格式
pydantic
内置了很多数据类型验证,包括很多很复杂的嵌套的类型都有
from typing import List
from pydantic import BaseSettings, validator, IPvAnyAddress, EmailStr, AnyHttpUrl
class Settings(BaseSettings):
#
API_V1_STR: str = "/api/admin/v1"
# SECRET_KEY 记得保密生产环境 不要直接写在代码里面
SECRET_KEY: str = "(-ASp+_)-Ulhw0848hnvVG-iqKyJSD&*&^-H3C9mqEqSl8KN-YRzRE"
# token过期时间 60 minutes * 24 hours * 8 days = 8 days
ACCESS_TOKEN_EXPIRE_MINUTES: int = 60 * 24 * 8
# 跨域设置 验证 list包含任意http url
BACKEND_CORS_ORIGINS: List[AnyHttpUrl] = ['http://localhost']
# 验证邮箱地址格式
FIRST_MALL: EmailStr = "wg_python@163.com"
# 实例化配置对象
settings = Settings()
注意
一定要实例化配置对象,实例化的时候,才会去验证数据合法性。
一些扩展知识
- 为什么不用
.ini
.ymal
等配置文件了?
答: 由于Python是解释性语言,把配置文件写代码里面,没什么不方便的,当然Python也可以使用.ini
.ymal
等配置文件。
如Go Java等编译性语言,把配置文件直接写代码,如果仅仅只是要改动配置文件,就很不方便,就需要重新再编译打包,耗时。
参考GitHub地址
https://github.com/CoderCharm/fastapi-mysql-generator
见个人博客 https://www.charmcode.cn/article/2020-07-11_FastAPI_Setting