Config File
c = Config(
ApplicationConfig(
5000
),
DBConfig(
"test.db",
"127.0.0.1",
3306,
"test_user",
"test_pass",
"lr_book"
)
)
你可能已经注意到了,硬编码的配置项是潜在的安全漏洞。而且一旦编译部署后,开发人员也很难改动控制它。
所以,你需要一个单独的配置文件。
添加 config.yml:
app:
port: 5000
db:
file_name: "test.db"
host: "127.0.0.1"
port: 3306
user: "test_user"
password: "test_pass"
database: "lr_book"
添加 yaml
依赖:
pip3 install pyyaml
更新 requirements.txt:
pip3 freeze > requirements.txt
添加 parseConfig
函数,infrastructure/config/config.py:
@@ -1,4 +1,5 @@
from dataclasses import dataclass
+import yaml
@dataclass
@@ -20,3 +21,12 @@ class ApplicationConfig:
class Config:
app: ApplicationConfig
db: DBConfig
+
+
+def parseConfig(filename: str) -> Config:
+ with open(filename, 'r') as f:
+ data = yaml.safe_load(f)
+ return Config(
+ ApplicationConfig(**data['app']),
+ DBConfig(**data['db'])
+ )
使用 parseConfig
,main.py:
@@ -2,21 +2,11 @@ from flask import Flask
from books.adapter.router import make_router
from books.application import WireHelper
-from books.infrastructure.config import Config, ApplicationConfig, DBConfig
+from books.infrastructure.config import Config, ApplicationConfig, DBConfig, parseConfig
-c = Config(
- ApplicationConfig(
- 8080
- ),
- DBConfig(
- "test.db",
- "127.0.0.1",
- 3306,
- "test_user",
- "test_pass",
- "lr_book"
- )
-)
+CONFIG_FILENAME = "config.yml"
+
+c = parseConfig(CONFIG_FILENAME)
wire_helper = WireHelper.new(c)
app = Flask(__name__)
make_router(app, wire_helper)
硬编码的配置项被移到了 config.yml
中。不错!
警醒: 不要直接 git 提交 config.yaml。可能会导致敏感数据泄露。如果非要提交的话,建议只提交配置格式模板。
比如:app: port: 5000 db: file_name: "" host: "" ...