【FastAPI 学习一】配置文件

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

posted @ 2020-12-25 22:56  王小右  阅读(5203)  评论(0编辑  收藏  举报