lesscode-fastapi 是基于FastAPI的web开发脚手架项目,该项目初衷为简化开发过程,让研发人员更加关注业务。
Project description
FastAPI Scaffold - 企业级脚手架项目
一套基于 FastAPI 的企业级脚手架项目,旨在简化开发过程,提供完整的后端开发解决方案。
✨ 特性
- 🚀 路由自动注册 - 自动扫描并注册 API 路由
- 🔧 多环境配置 - 支持开发、生产、测试环境配置
- 📝 日志系统 - 支持控制台与文件双输出,可配置日志级别和存储
- ⚡ 统一异常处理 - 完善的异常处理机制和错误日志记录
- 📊 统一响应格式 - 标准化的 API 响应格式,自动包装处理
- 🗄️ 多数据源支持 - 基于 SQLAlchemy,支持配置多个数据源
- 🏗️ 分层架构 - 清晰的代码分层:API 层、服务层、仓储层、模型层
- 💾 缓存支持 - 基于 Redis 的缓存系统,可配置开启/关闭
- 🔒 安全特性 - 密码加密、数据验证、CORS 配置
📁 项目结构
lesscode-fastapi/
├── app/ # 应用核心目录\n
│ ├── api/ # API 路由层(控制器)\n
│ │ └── user.py # 用户 API 示例\n
│ ├── core/ # 核心功能模块\n
│ │ ├── cache.py # 缓存管理\n
│ │ ├── database.py # 数据库连接\n
│ │ ├── exceptions.py # 自定义异常\n│ │ ├── exception_handlers.py # 异常处理器\n│ │ ├── logging.py # 日志配置\n│ │ └── router.py # 路由注册器\n│ ├── models/ # 数据模型层\n│ │ ├── base.py # 基础模型\n│ │ └── user.py # 用户模型示例\n│ ├── repositories/ # 数据访问层(仓储)\n│ │ ├── base.py # 基础仓储类\n│ │ └── user.py # 用户仓储示例\n│ ├── schemas/ # 数据验证模式\n│ │ ├── response.py # 响应模式\n│ │ └── user.py # 用户模式示例\n│ ├── services/ # 业务逻辑层\n│ │ └── user.py # 用户服务示例\n│ └── utils/ # 工具函数\n│ └── response.py # 响应工具\n├── config/ # 配置模块\n│ └── settings.py # 配置管理\n├── logs/ # 日志目录\n├── tests/ # 测试目录\n├── scripts/ # 脚本目录\n├── .env.development # 开发环境配置\n├── .env.production # 生产环境配置\n├── .env.testing # 测试环境配置\n├── main.py # 应用入口\n├── run.py # 启动脚本\n└── requirements.txt # 项目依赖\n```
## 🚀 快速开始
### 1. 安装依赖
```bash\npip install -r requirements.txt\n```
### 2. 配置环境\n\n复制并修改环境配置文件:
```bash\n# 开发环境\ncp .env.development .env\n\n# 或根据需要选择其他环境\ncp .env.production .env\ncp .env.testing .env\n```\n\n### 3. 启动应用\n\n#### 使用启动脚本(推荐)\n\n```bash\n# 开发环境启动(默认)\npython run.py\n\n# 指定环境启动\npython run.py --env development\npython run.py --env production\npython run.py --env testing\n\n# 自定义参数启动\npython run.py --host 0.0.0.0 --port 8080 --reload\n```\n\n#### 直接使用 uvicorn\n\n```bash\nuvicorn main:app --reload --host 0.0.0.0 --port 8000\n```\n\n### 4. 访问应用\n\n- API 文档:http://localhost:8000/docs\n- ReDoc 文档:http://localhost:8000/redoc\n- 健康检查:http://localhost:8000/health\n\n## ⚙️ 配置说明\n\n### 环境配置文件\n\n项目支持三种环境配置:\n\n- `.env.development` - 开发环境\n- `.env.production` - 生产环境 \n- `.env.testing` - 测试环境\n\n### 主要配置项\n\n```bash\n# 应用配置\nAPP_NAME=FastAPI Scaffold\nDEBUG=true\nENVIRONMENT=development\nHOST=0.0.0.0\nPORT=8000\n\n# 数据库配置\nDATABASE_URL=sqlite:///./dev.db\nDATABASE_POOL_SIZE=10\n\n# 多数据源配置(可选)\nDATABASE_URLS=main=sqlite:///./main.db,analytics=sqlite:///./analytics.db\n\n# Redis 缓存配置\nREDIS_URL=redis://localhost:6379/0\nREDIS_ENABLED=false\n\n# 日志配置\nLOG_LEVEL=DEBUG\nLOG_FILE=logs/app.log\nLOG_ROTATION=10 MB\nLOG_RETENTION=10 days\n\n# JWT 配置\nSECRET_KEY=your-secret-key\nACCESS_TOKEN_EXPIRE_MINUTES=30\n```\n\n## 🏗️ 架构设计\n\n### 分层架构\n\n1. **API 层 (app/api/)** - 路由和请求处理\n2. **服务层 (app/services/)** - 业务逻辑处理\n3. **仓储层 (app/repositories/)** - 数据访问抽象\n4. **模型层 (app/models/)** - 数据库模型定义\n\n### 数据流\n\n```\nAPI 层 → 服务层 → 仓储层 → 模型层 → 数据库\n ↑ ↑ ↑ ↑\n请求处理 业务逻辑 数据访问 数据模型\n```\n\n## 💾 数据库使用\n\n### 单数据源\n\n```python\nfrom app.core.database import get_db\nfrom sqlalchemy.orm import Session\n\ndef some_function(db: Session = Depends(get_db)):\n # 使用默认数据库\n pass\n```\n\n### 多数据源\n\n```python\nfrom app.core.database import get_db\n\ndef some_function():\n # 使用指定数据库\n with get_db_context(\"analytics\") as db:\n # 数据库操作\n pass\n```\n\n## 🔄 缓存使用\n\n### 启用缓存\n\n在环境配置中设置:\n```bash\nREDIS_ENABLED=true\nREDIS_URL=redis://localhost:6379/0\n```\n\n### 使用缓存装饰器\n\n```python\nfrom app.core.cache import cached, cache_clear\n\n@cached(key_prefix=\"user\", expire=3600)\nasync def get_user_data(user_id: int):\n # 数据获取逻辑\n return user_data\n\n@cache_clear([\"user:*\"])\nasync def update_user_data(user_id: int, data):\n # 数据更新逻辑\n pass\n```\n\n## 📝 添加新功能\n\n### 1. 创建模型\n\n```python\n# app/models/your_model.py\nfrom sqlalchemy import Column, String\nfrom app.models.base import BaseModel\n\nclass YourModel(BaseModel):\n __tablename__ = \"your_table\"\n \n name = Column(String(100), nullable=False)\n```\n\n### 2. 创建 Schema\n\n```python\n# app/schemas/your_schema.py\nfrom pydantic import BaseModel\n\nclass YourSchema(BaseModel):\n name: str\n \n class Config:\n from_attributes = True\n```\n\n### 3. 创建仓储\n\n```python\n# app/repositories/your_repository.py\nfrom app.repositories.base import BaseRepository\nfrom app.models.your_model import YourModel\n\nclass YourRepository(BaseRepository[YourModel]):\n def __init__(self, database_name: str = \"default\"):\n super().__init__(YourModel, database_name)\n```\n\n### 4. 创建服务\n\n```python\n# app/services/your_service.py\nfrom app.repositories.your_repository import YourRepository\n\nclass YourService:\n def __init__(self, database_name: str = \"default\"):\n self.repo = YourRepository(database_name)\n \n async def get_data(self, id: int):\n return self.repo.get(id)\n```\n\n### 5. 创建 API\n\n```python\n# app/api/your_api.py\nfrom fastapi import APIRouter, Depends\nfrom app.services.your_service import YourService\n\nrouter = APIRouter()\nPREFIX = \"/your-resource\"\nTAGS = [\"Your Resource\"]\n\n@router.get(\"/{id}\")\nasync def get_item(id: int, service: YourService = Depends()):\n return await service.get_data(id)\n```\n\n## 🔍 日志使用\n\n```python\nfrom app.core.logging import get_logger\n\nlogger = get_logger(__name__)\n\nlogger.info(\"信息日志\")\nlogger.error(\"错误日志\")\nlogger.warning(\"警告日志\")\nlogger.debug(\"调试日志\")\n```\n\n## 🚦 异常处理\n\n```python\nfrom app.core.exceptions import (\n BusinessException,\n ValidationException,\n ResourceNotFoundException\n)\n\n# 业务异常\nraise BusinessException(\"业务逻辑错误\")\n\n# 验证异常\nraise ValidationException(\"数据验证失败\")\n\n# 资源未找到\nraise ResourceNotFoundException(\"资源不存在\")\n```\n\n## 📊 响应格式\n\n所有 API 响应都遵循统一格式:\n\n```json\n{\n \"success\": true,\n \"message\": \"操作成功\",\n \"code\": 200,\n \"data\": {},\n \"timestamp\": 1640995200\n}\n```\n\n分页响应格式:\n\n```json\n{\n \"success\": true,\n \"message\": \"操作成功\",\n \"code\": 200,\n \"data\": [],\n \"page_info\": {\n \"page\": 1,\n \"page_size\": 20,\n \"total\": 100,\n \"total_pages\": 5,\n \"has_next\": true,\n \"has_prev\": false\n },\n \"timestamp\": 1640995200\n}\n```\n\n## 🧪 测试\n\n```bash\n# 安装测试依赖\npip install pytest pytest-asyncio httpx\n\n# 运行测试\npytest tests/\n\n# 运行测试并查看覆盖率\npytest tests/ --cov=app\n```\n\n## 📋 开发规范\n\n### 代码组织\n\n1. **模型层** - 只定义数据结构,不包含业务逻辑\n2. **仓储层** - 只处理数据访问,不包含业务逻辑\n3. **服务层** - 包含核心业务逻辑\n4. **API 层** - 只处理请求响应,调用服务层\n\n### 命名规范\n\n- 文件名:小写下划线命名 `user_service.py`\n- 类名:大驼峰命名 `UserService`\n- 函数名:小写下划线命名 `get_user_by_id`\n- 常量:大写下划线命名 `DEFAULT_PAGE_SIZE`\n\n### 错误处理\n\n- 使用自定义异常类\n- 记录详细的错误日志\n- 返回用户友好的错误信息\n- 不在生产环境暴露系统内部信息\n\n## 🚀 部署\n\n### 生产环境部署\n\n```bash\n# 使用 gunicorn\ngunicorn main:app -w 4 -k uvicorn.workers.UvicornWorker\n\n# 或使用启动脚本\npython run.py --env production --workers 4\n```\n\n### 环境变量\n\n生产环境请确保设置以下环境变量:\n\n- `ENVIRONMENT=production`\n- `SECRET_KEY=强密钥`\n- `DATABASE_URL=生产数据库URL`\n- `REDIS_URL=生产Redis URL`\n\n## 🤝 贡献\n\n欢迎提交 Issue 和 Pull Request 来改进这个项目。\n\n## 📄 许可证\n\n[MIT License](LICENSE)\n\n---\n\n**FastAPI Scaffold** - 让后端开发更简单高效!
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
lesscode_fastapi-0.0.6.tar.gz
(28.4 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file lesscode_fastapi-0.0.6.tar.gz.
File metadata
- Download URL: lesscode_fastapi-0.0.6.tar.gz
- Upload date:
- Size: 28.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.23
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
61a7bbe68cb781801b6c86d14c150a0b7d5960136634a70219012635d25a034c
|
|
| MD5 |
202aa29f3f8aff92537042f8ea112da8
|
|
| BLAKE2b-256 |
124b8c8ec60706f719dec79a18099d7ae758878e04fe65b480567c095d94ba66
|
File details
Details for the file lesscode_fastapi-0.0.6-py3-none-any.whl.
File metadata
- Download URL: lesscode_fastapi-0.0.6-py3-none-any.whl
- Upload date:
- Size: 30.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.23
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
17367a4aba054b91aed8253888a1968178c7985e9817356a0a9f6a94f0bde152
|
|
| MD5 |
0bd3b3f0b185229d4fdebe49e5495750
|
|
| BLAKE2b-256 |
e7e7149be81e9c05fe795cb4fced380d7cf711c2f9f26e50b584064713187d8f
|