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