# 资产管理系统 - 后端API 基于 FastAPI + SQLAlchemy + PostgreSQL 的企业级资产管理系统后端API ## 技术栈 - **框架**: FastAPI 0.104+ - **ORM**: SQLAlchemy 2.0+ (异步模式) - **数据库**: PostgreSQL 14+ - **缓存**: Redis - **认证**: JWT (python-jose) - **密码加密**: bcrypt - **数据验证**: Pydantic v2 - **数据库迁移**: Alembic - **测试**: pytest - **ASGI服务器**: Uvicorn ## 项目结构 ``` asset_management_backend/ ├── app/ │ ├── api/ # API路由 │ │ └── v1/ │ │ ├── auth.py # 认证相关API │ │ └── __init__.py │ ├── core/ # 核心模块 │ │ ├── config.py # 配置管理 │ │ ├── security.py # 安全相关 │ │ ├── deps.py # 依赖注入 │ │ ├── exceptions.py # 自定义异常 │ │ └── response.py # 统一响应 │ ├── crud/ # 数据库CRUD操作 │ │ ├── user.py # 用户CRUD │ │ └── ... │ ├── db/ # 数据库相关 │ │ ├── base.py # 模型基类 │ │ └── session.py # 会话管理 │ ├── models/ # SQLAlchemy模型 │ │ ├── user.py # 用户模型 │ │ └── ... │ ├── schemas/ # Pydantic Schema │ │ ├── user.py # 用户Schema │ │ └── ... │ ├── services/ # 业务逻辑层 │ │ ├── auth_service.py # 认证服务 │ │ └── ... │ └── utils/ # 工具函数 │ └── ... ├── alembic/ # 数据库迁移 │ └── versions/ ├── tests/ # 测试 ├── logs/ # 日志文件 ├── uploads/ # 上传文件 ├── .env.example # 环境变量示例 ├── requirements.txt # 依赖包 ├── run.py # 开发服务器启动脚本 └── README.md # 项目说明 ``` ## 快速开始 ### 1. 环境准备 确保已安装: - Python 3.10+ - PostgreSQL 14+ - Redis ### 2. 安装依赖 ```bash # 创建虚拟环境 python -m venv venv # 激活虚拟环境 # Windows: venv\Scripts\activate # Linux/Mac: source venv/bin/activate # 安装依赖包 pip install -r requirements.txt ``` ### 3. 配置环境变量 ```bash # 复制环境变量示例文件 cp .env.example .env # 编辑 .env 文件,配置数据库等信息 ``` ### 4. 初始化数据库 ```bash # 创建数据库 createdb asset_management # 运行数据库迁移 alembic upgrade head # 或在开发环境直接初始化(会自动创建表) # 修改 app/main.py 中的 lifespan 函数,取消注释 init_db() ``` ### 5. 启动服务 ```bash # 开发模式(支持热重载) python run.py # 或使用 uvicorn uvicorn app.main:app --reload --host 0.0.0.0 --port 8000 ``` ### 6. 访问API文档 启动成功后,访问以下地址: - Swagger UI: http://localhost:8000/docs - ReDoc: http://localhost:8000/redoc - OpenAPI JSON: http://localhost:8000/openapi.json ## API端点 ### 认证模块 - `POST /api/v1/auth/login` - 用户登录 - `POST /api/v1/auth/refresh` - 刷新令牌 - `POST /api/v1/auth/logout` - 用户登出 - `PUT /api/v1/auth/change-password` - 修改密码 - `GET /api/v1/auth/captcha` - 获取验证码 ### 用户管理 - `GET /api/v1/users` - 用户列表 - `POST /api/v1/users` - 创建用户 - `GET /api/v1/users/{user_id}` - 获取用户详情 - `PUT /api/v1/users/{user_id}` - 更新用户 - `DELETE /api/v1/users/{user_id}` - 删除用户 - `POST /api/v1/users/{user_id}/reset-password` - 重置密码 - `GET /api/v1/users/me` - 获取当前用户信息 ### 角色权限 - `GET /api/v1/roles` - 角色列表 - `POST /api/v1/roles` - 创建角色 - `GET /api/v1/roles/{role_id}` - 获取角色详情 - `PUT /api/v1/roles/{role_id}` - 更新角色 - `DELETE /api/v1/roles/{role_id}` - 删除角色 - `GET /api/v1/permissions/tree` - 权限树列表 更多API请查看Swagger文档。 ## 开发规范 请参考 `development_standards_guide.md` 文件。 ### 代码风格 - 遵循 PEP 8 规范 - 使用 Black 进行代码格式化 - 使用 isort 管理导入 - 使用 flake8 进行代码检查 - 使用 mypy 进行类型检查 ### 提交规范 遵循 Conventional Commits 规范: ``` feat: 新功能 fix: Bug修复 docs: 文档更新 style: 代码格式 refactor: 重构 perf: 性能优化 test: 测试 chore: 构建/工具 ``` 示例: ```bash git commit -m "feat(auth): 实现用户登录功能" git commit -m "fix(asset): 修复资产状态转换问题" ``` ## 测试 ```bash # 运行所有测试 pytest # 运行特定测试文件 pytest tests/api/test_auth.py # 生成覆盖率报告 pytest --cov=app --cov-report=html # 查看覆盖率报告 open htmlcov/index.html ``` ## 数据库迁移 ```bash # 创建新的迁移 alembic revision --autogenerate -m "描述信息" # 执行迁移 alembic upgrade head # 回滚迁移 alembic downgrade -1 # 查看迁移历史 alembic history # 查看当前版本 alembic current ``` ## 生产部署 ### 使用 Docker ```bash # 构建镜像 docker build -t asset-management-backend . # 运行容器 docker run -d \ --name asset-backend \ -p 8000:8000 \ --env-file .env \ asset-management-backend ``` ### 使用 Gunicorn + Uvicorn ```bash pip install gunicorn gunicorn app.main:app \ --workers 4 \ --worker-class uvicorn.workers.UvicornWorker \ --bind 0.0.0.0:8000 \ --access-logfile - \ --error-logfile - ``` ## 常见问题 ### 数据库连接失败 检查 `DATABASE_URL` 是否正确配置,确保PostgreSQL服务正在运行。 ### Redis连接失败 检查 `REDIS_URL` 是否正确配置,确保Redis服务正在运行。 ### Token验证失败 确保 `SECRET_KEY` 配置正确,并检查Token是否过期。 ## 贡献指南 1. Fork 本仓库 2. 创建功能分支 (`git checkout -b feature/AmazingFeature`) 3. 提交更改 (`git commit -m 'feat: Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 创建 Pull Request ## 许可证 本项目采用 MIT 许可证。 ## 联系方式 - 项目负责人: 老王 - 创建时间: 2025-01-24 - 版本: v1.0.0