Skip to main content

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.8.tar.gz (28.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lesscode_fastapi-0.0.8-py3-none-any.whl (30.9 kB view details)

Uploaded Python 3

File details

Details for the file lesscode_fastapi-0.0.8.tar.gz.

File metadata

  • Download URL: lesscode_fastapi-0.0.8.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

Hashes for lesscode_fastapi-0.0.8.tar.gz
Algorithm Hash digest
SHA256 b55c43c4d0715bc4609825ffb34f5e5a78edb1f13a05bd1e150756ee6b210129
MD5 1a054130344d4e8931f645524bcb2b1c
BLAKE2b-256 94e549ec12cbe1aea6b44d9438bff2ee5dcf0c1a629532a4ba92d21aae065441

See more details on using hashes here.

File details

Details for the file lesscode_fastapi-0.0.8-py3-none-any.whl.

File metadata

File hashes

Hashes for lesscode_fastapi-0.0.8-py3-none-any.whl
Algorithm Hash digest
SHA256 391d59b5d5dfc260243d6a985104a1f41c2501806422ba8d6ed1c16d910ee10e
MD5 8cfc947ec6ae983e34bbd2cbadf9cf51
BLAKE2b-256 b070e97963ab1a635e7f2784f8bd6bc231d1ab1386c40c13c98b3447e547357a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page