當我們的系統發展到一定程度時, 難免會面臨到正式上線的問題, 要如何讓維運更加簡易呢? 尤其隨著複雜的客製化配置的出現時, 我們應該如何有效的管理, 甚至驗證配置是否如預期資料型態、格式…, 而正好 pydantic 可以滿足這樣的需求, 就讓我們來看看怎麼使用吧!
pip install pydantic
pip install pydantic-settings
這個檔案主要是環境變數的配置檔案, 我們有哪些配置開放給安裝人員配置的入口都在這裡, 大致格式如下:
DATABASE_URL=postgresql://user:password@localhost:5432/mydb
DEBUG=true
這隻檔案主要設計我們在程式裡面會使用到的配置是哪些, 並設計預設值與驗證方式。
from pydantic_settings import BaseSettings
class Settings(BaseSettings):
database_url: str
debug: bool
class Config:
"""<https://docs.pydantic.dev/latest/concepts/pydantic_settings/#usage>
"""
# 指定 .env 文件
env_file = ".env"
env_file_encoding = "utf-8"
我們使用這隻檔案來驗證一下我們的配置檔:
from settings import Settings
settings = Settings()
print(settings.database_url) # 輸出: postgresql://user:password@localhost:5432/mydb
print(settings.debug)
我們的.env這樣設定, DEBUG的部份被改成非bool的資料型態:
DATABASE_URL=postgresql://user:password@localhost:5432/mydb
DEBUG=unknow
執行後發生驗證錯誤:
Traceback (most recent call last):
File "/home/xxx/下載/test/run.py", line 3, in <module>
settings = Settings()
^^^^^^^^^^
File "/home/xxx/anaconda3/lib/python3.11/site-packages/pydantic_settings/main.py", line 167, in __init__
super().__init__(
File "/home/xxx/anaconda3/lib/python3.11/site-packages/pydantic/main.py", line 214, in __init__
validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pydantic_core._pydantic_core.ValidationError: 1 validation error for Settings
debug
Input should be a valid boolean, unable to interpret input [type=bool_parsing, input_value='unknow', input_type=str]
For further information visit <https://errors.pydantic.dev/2.10/v/bool_parsing>
開放給用戶配置固然重要, 但我們很難保證人工失誤的狀況, 因此做一點驗證總是好事, 避免不熟悉系統的維運人員配置錯誤造成難以挽回的損失, 因此本章節對於系統即將上線的朋友來說非常的有幫助, 關於這部份如果您有更好的作法也歡迎下方留言討論, 讓我們互相學習與討論。