You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
iTi-Flask/docs/CONFIGURATION.md

139 lines
2.5 KiB
Markdown

# 配置
iTi-Flask 内置 `dev`、`test`、`prod` 三套配置。
默认环境是 `dev`
## 环境选择
```bash
FLASK_ENV=dev uv run python -m flask --app app.py run --debug
```
`create_app(config_name="test")` 可以直接指定环境。
业务项目通常传入自己的配置映射:
```python
from iti.config import DevConfig as BaseDevConfig
from iti.config import ProdConfig as BaseProdConfig
from iti.config import TestConfig as BaseTestConfig
class DevConfig(BaseDevConfig):
SQLALCHEMY_DATABASE_URI = "sqlite:///runtime/app_dev.db"
class TestConfig(BaseTestConfig):
SQLALCHEMY_DATABASE_URI = "sqlite:///:memory:"
class ProdConfig(BaseProdConfig):
pass
config = {
"dev": DevConfig,
"test": TestConfig,
"prod": ProdConfig,
"default": DevConfig,
}
```
## env 文件
框架会从当前工作目录加载第一个存在的 env 文件:
1. `.env.local`
2. `.env.<FLASK_ENV>`
3. `.env`
也可以用 `ITI_ENV_DIR` 指定查找目录:
```bash
ITI_ENV_DIR=/path/to/app FLASK_ENV=prod uv run python -m flask --app app.py run
```
## 常用配置项
| 配置项 | 说明 |
| --- | --- |
| `SECRET_KEY` | Flask 密钥 |
| `JWT_SECRET_KEY` | JWT 密钥 |
| `DATABASE_URL` | 数据库连接串 |
| `REDIS_URL` | 生产限流存储地址 |
| `FRONTEND_ENABLED` | 是否启用 SPA 承载 |
| `FRONTEND_PATH` | SPA 构建目录 |
| `SERVICES` | 服务客户端配置 |
| `TASKS_ENABLED` | 是否启动任务调度线程 |
## 数据库
默认使用 SQLite。
开发环境默认数据库:
```text
runtime/iti-flask_dev.db
```
测试环境使用内存数据库:
```text
sqlite:///:memory:
```
生产环境优先读取 `DATABASE_URL`
`postgres://` 会自动转换为 `postgresql://`
## 限流
默认启用 Flask-Limiter。
开发环境:
```python
RATELIMIT_ENABLED = True
RATELIMIT_STORAGE_URL = "memory://"
RATELIMIT_DEFAULT = "1000 per hour"
```
测试环境禁用限流。
生产环境默认从 `REDIS_URL` 读取存储地址:
```python
RATELIMIT_DEFAULT = "100 per hour"
```
路由级限流:
```python
from iti.applications.extensions import limiter
@bp.get("/reports")
@limiter.limit("10 per minute")
def list_reports():
return {"data": []}
```
## 缓存
框架初始化两个缓存配置:
- `CACHE_SIMPLE`
- `CACHE_REDIS`
本地默认启用 `SimpleCache`
Redis 缓存默认关闭。
## 文件存储
本地文件默认写入:
```text
runtime/uploads
```
业务项目可以覆盖 `FILE_STORAGE["LOCAL"]["base_path"]`