【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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM