# begin-pms **Repository Path**: yangsj/begin-pms ## Basic Information - **Project Name**: begin-pms - **Description**: 项目管理 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-10 - **Last Updated**: 2026-10-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Begin PMS(第一期 M0+M1 已落地) Django 5 + DRF + MySQL(begin_pms)+ 连接池,模块化 `apps/` 结构,暂无 Redis;前端 Vue3 + Vite(`frontend/`)。 ## 本地启动 后端: ```bash python3 -m venv .venv && source .venv/bin/activate pip install -r requirements/dev.txt # MySQL:直接用系统已有实例(127.0.0.1:3306,库名 begin_pms),无需 Docker 起库 # 设置 DB_USER(用户名)和 DB_PWD(密码);旧变量 BEGIN_DB / DB_PASSWORD / BEGIN_DB_PWD 仍兼容 python manage.py migrate python manage.py createsuperuser python manage.py runserver ``` 前端(另开终端): ```bash cd frontend npm install npm run dev # 开发热更新,http://localhost:5173,/api 自动代理到 127.0.0.1:8000 npm run build # vue-tsc 类型检查 + 生产构建,产出 frontend/dist/ ``` ### 编译模式:只启动后端 前端 `npm run build` 后,产物由 whitenoise 挂在站点根路径,**只跑后端即可同时服务页面与 API**: ```bash python manage.py runserver # 打开 http://127.0.0.1:8000/pms/ 即是前端页面 ``` - 页面路由(/pms/login、/pms/projects…)由 pms_spa 视图返回 `dist/index.html`;旧根路径(/login)302 到 /pms/ 等价地址 - 静态资源(/pms/assets/*)由同一视图从 dist 提供(带 MIME/Etag) - 改前端代码后需重新 `npm run build`;开发时想热更新仍用 `npm run dev` - ⚠️ 生产部署(DEBUG=False)时 admin/DRF 静态文件需先 `python manage.py collectstatic` ## 测试与检查 ```bash pytest # 测试跑在同引擎 MySQL(自动创建 test_begin_pms,无需手动准备) ruff check . ``` ## API 一览(/api/v1/) | 端点 | 说明 | |---|---| | `POST /api/v1/auth/token/` | 登录获取 JWT(access/refresh) | | `POST /api/v1/auth/token/refresh/` | 刷新 access token | | `/api/v1/projects/` | 项目 CRUD(负责人/参与项目可见;支持 `?status=&search=&ordering=`) | | `/api/v1/applications/` | 应用登记(`?project=&is_active=`) | | `/api/v1/project-members/` | 项目成员管理(`?project=&role=`) | | `GET /api/health/` | 健康检查(含 DB 连通性) | 通用参数:`page`、`page_size`(≤100)。 ## 前端结构(frontend/) ```text frontend/src/ ├── api/ # http.ts(axios 实例:Bearer 注入 + 401 自动刷新重放)+ 按领域拆分的接口模块 ├── stores/ # Pinia:auth(登录态/用户名) ├── router/ # 路由 + 登录守卫(未登录重定向 /login,带 redirect 回跳) ├── layouts/ # MainLayout(侧边导航,M2/M3 入口占位) ├── views/ # Login / Dashboard / Projects / Applications / 404 ├── types/ # 与 DRF 序列化器对齐的 TS 类型 └── styles/ # 全局样式(无重型 UI 库,gzip 总计约 66KB) ``` ## 架构约定 ```mermaid flowchart TD A[config/ 工程配置
settings: base/dev/prod/test] --> B[apps/users
自定义用户 + JWT] A --> C[apps/projects
Project / Application / ProjectMember] B --> D[apps/common
TimeStamped / 分页 / 健康检查] C --> D A --> E[(MySQL begin_pms
连接池 dj-db-conn-pool)] ``` - **模块化**:`apps/<领域>/`(models/serializers/views/permissions/tests),新增领域复制该结构即可。 - **扩展性**:settings 按 base/dev/prod/test 拆分 + 环境变量注入;API 版本化 `/api/v1/`;自定义 User 从第一天启用。 - **高性能**:MySQL 连接池(POOL_SIZE/MAX_OVERFLOW/RECYCLE 可配)+ `CONN_MAX_AGE`;列表 `select_related` + 聚合注解避免 N+1;统一分页上限;常用过滤字段建索引。 - **权限**:平台角色(User.role)与项目内角色(ProjectMember.role)解耦;写操作限负责人/项目管理员/平台管理员。