{"id":13597896,"url":"https://github.com/caoqianming/django-vue-admin","last_synced_at":"2026-06-29T08:01:46.637Z","repository":{"id":41947728,"uuid":"256214961","full_name":"caoqianming/django-vue-admin","owner":"caoqianming","description":"基于RBAC模型权限控制的中小型应用的基础开发平台,前后端分离,后端采用django+django-rest-framework,前端采用vue+ElementUI,移动端采用uniapp+uView(可发布h5和小程序).","archived":false,"fork":false,"pushed_at":"2026-03-16T13:08:52.000Z","size":3579,"stargazers_count":1088,"open_issues_count":1,"forks_count":293,"subscribers_count":18,"default_branch":"master","last_synced_at":"2026-03-17T01:31:06.332Z","etag":null,"topics":["django","django-rest-framework","element-ui","python","rbac","vue","workflow"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/caoqianming.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-04-16T12:55:54.000Z","updated_at":"2026-03-16T13:08:57.000Z","dependencies_parsed_at":"2023-11-11T03:27:13.130Z","dependency_job_id":"4c824a15-950e-4b2a-bbf4-3dd29643c858","html_url":"https://github.com/caoqianming/django-vue-admin","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/caoqianming/django-vue-admin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/caoqianming%2Fdjango-vue-admin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/caoqianming%2Fdjango-vue-admin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/caoqianming%2Fdjango-vue-admin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/caoqianming%2Fdjango-vue-admin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/caoqianming","download_url":"https://codeload.github.com/caoqianming/django-vue-admin/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/caoqianming%2Fdjango-vue-admin/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34918101,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-29T02:00:05.398Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["django","django-rest-framework","element-ui","python","rbac","vue","workflow"],"created_at":"2024-08-01T17:00:43.015Z","updated_at":"2026-06-29T08:01:46.620Z","avatar_url":"https://github.com/caoqianming.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"# django-vue-admin\n\n基于 RBAC 权限模型的前后端分离后台管理平台，适合作为中小型业务系统的基础开发骨架。\n\n后端使用 Django + Django REST Framework，前端使用 Vue 2 + Element UI，移动端目录中提供了基于 uni-app + uView 的实现。\n\n## 项目特性\n\n- 前后端分离：后端提供 REST API，前端按权限动态加载路由和菜单\n- RBAC 权限控制：支持接口级功能权限控制\n- 数据权限：内置全部、本级及以下、同级及以下、本人等基础规则\n- JWT 认证：默认使用 `djangorestframework-simplejwt`\n- 审计能力：可结合 `django-simple-history` 记录变更历史\n- 定时任务：集成 Celery + `django-celery-beat`\n- 接口文档：内置 Swagger 页面\n- 工作流模块：参考 loonflow 思路做了简化实现\n\n## 内置模块\n\n- 组织机构\n- 用户管理\n- 角色管理\n- 岗位管理\n- 权限管理\n- 数据字典\n- 文件库\n- 定时任务\n- 工作流\n- 系统监控\n\n## 技术栈\n\n### 后端\n\n- Django 4.2.27\n- Django REST Framework 3.14.0\n- Simple JWT 5.5.1\n- django-celery-beat 2.5.0\n- django-simple-history 3.4.0\n- drf-yasg 1.21.7\n- Redis\n\n### 前端\n\n- Vue 2.6\n- Element UI 2.15\n- Vue Router 3\n- Vuex 3\n- Axios 1.6\n\n## 目录结构\n\n```text\n.\n├─ client/       Web 管理端\n├─ client_mp/    移动端（uni-app + uView）\n├─ img/          README 截图资源\n├─ server/       Django 后端\n├─ docker-compose.yml\n└─ README.md\n```\n\n## 快速开始\n\n### 运行环境\n\n- Python 3.10+（建议）\n- Node.js 16 或更高版本\n- Redis 6+（使用定时任务时需要）\n- PostgreSQL（如需完整使用工作流模块，建议使用）\n\n### 1. 启动后端\n\n进入目录：`server`\n\n```bash\npython -m venv venv\n.\\venv\\Scripts\\activate\npip install -r requirements.txt\n```\n\n项目使用 `server/server/conf.py` 读取数据库和调试配置。\n如果是首次初始化，可参考同目录下的 `conf_e.py` 创建或调整配置。\n\n执行数据库迁移：\n\n```bash\npython manage.py migrate\n```\n\n可选：导入初始化数据\n\n```bash\npython manage.py loaddata db.json\n```\n\n说明：仓库当前已包含 `server/db.sqlite3`，本地体验时也可以直接使用。\n\n创建超级管理员：\n\n```bash\npython manage.py createsuperuser\n```\n\n启动开发服务：\n\n```bash\npython manage.py runserver 8000\n```\n\n### 2. 启动前端\n\n进入目录：`client`\n\n```bash\nnpm install --registry=https://registry.npmmirror.com\nnpm run dev\n```\n\n默认开发环境下，前端接口地址为：`http://localhost:8000/api`\n\n### 3. 访问入口\n\n前端开发服务默认端口通常为 `9528`。如果通过 Nginx 代理，可统一从 `8012` 访问。\n\n- 前端页面：`http://localhost:8012/` 或 `http://localhost:9528/`\n- Swagger 文档：`http://localhost:8000/api/swagger/`\n- Django Admin：`http://localhost:8000/django/admin/`\n\n## 本地联调 Nginx 示例\n\n如果你希望本地通过一个端口同时访问前端页面和后端媒体文件，可以参考以下配置：\n\n```nginx\nlisten 8012;\n\nlocation /media {\n    proxy_pass http://localhost:8000;\n}\n\nlocation / {\n    proxy_pass http://localhost:9528;\n}\n```\n\n## Docker Compose 运行\n\n仓库根目录提供了 `docker-compose.yml`，默认包含以下服务：\n\n- `backend`：Django 后端\n- `frontend`：Vue 前端\n- `redis`：Redis\n\n启动：\n\n```bash\ndocker-compose up -d\n```\n\n启动后默认访问：\n\n- 后端：`http://localhost:8000/`\n- 前端：`http://localhost:8012/`\n\n在容器内执行命令示例：\n\n```bash\ndocker-compose exec backend python manage.py makemigrations\n```\n\n说明：当前 `docker-compose.yml` 默认更偏向开发模式，若用于单机生产部署，建议切换为生产镜像和生产配置。\n\n## 生产部署说明\n\n部署时请重点检查以下配置：\n\n- `server/server/conf.py` 中的数据库连接、`DEBUG`、主机配置\n- 静态资源和媒体文件目录\n- Nginx 反向代理配置\n- Redis、Celery、数据库的网络连通性\n\n前后端可以分开部署，也可以先构建前端，再将前端 `dist` 内容替换到后端 `server/dist` 中统一托管，然后执行 `collectstatic`。\n\nGunicorn 启动示例：\n\n```bash\ngunicorn -w 5 -b 0.0.0.0:2251 server.wsgi\n```\n\n如需 WebSocket，可额外使用 Daphne 并配合 Supervisor 管理进程。\n\nNginx 可参考：\n\n```nginx\nserver {\n    listen 2250;\n    client_max_body_size 1024m;\n\n    location /media/ {\n        alias /home/lighthouse/xx/media/;\n        limit_rate 800k;\n    }\n\n    location / {\n        alias /home/lighthouse/xx/dist/;\n        index index.html;\n    }\n\n    location ~ ^/(api|django)/ {\n        set $CSRFTOKEN \"\";\n        if ($http_cookie ~* \"CSRFTOKEN=(.+?)(?=;|$)\") {\n            set $CSRFTOKEN \"$1\";\n        }\n        proxy_set_header X-CSRFToken $CSRFTOKEN;\n        proxy_pass http://localhost:2251;\n        proxy_pass_header Authorization;\n        proxy_pass_header WWW-Authenticate;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n    }\n\n    location /ws/ {\n        proxy_pass http://localhost:2252;\n        proxy_http_version 1.1;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection \"upgrade\";\n        proxy_redirect off;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Host $server_name;\n    }\n}\n```\n\n## 权限设计说明\n\n本项目采用“前端路由 + 后端权限码”的方式控制访问：\n\n- 前端在路由配置中通过 `meta.perm` 等字段控制页面显示与按钮权限\n- 后端在接口层通过 `RbacPermission` 校验用户权限码\n- 数据权限在 `has_object_permission` 中做了基础规则扩展，可按业务继续自定义\n\n核心代码位置：\n\n- 后端权限：`server/apps/system/permission.py`\n- 前端权限控制：`client/src/permission.js`\n- 前端路由与权限生成：`client/src/store/modules/permission.js`\n\n## 定时任务说明\n\n定时任务使用 Celery 和 `django-celery-beat` 实现。\n\n需要先启动 Redis，然后分别启动 worker 和 beat：\n\n```bash\ncelery -A server worker -l info -P eventlet\ncelery -A server beat -l info\n```\n\n说明：Linux 环境下通常不需要 `-P eventlet`。\n\n## 工作流说明\n\n工作流模块参考 loonflow 的实现思路，并做了简化。后端主要代码位于 `server/apps/wf`。\n\n建议：\n\n- 如果需要稳定使用复杂工作流能力，优先使用 PostgreSQL\n- 预览或轻量体验可直接使用 SQLite，但部分 JSON 查询能力会受限\n\n## 预览地址\n\n演示环境：\u003chttp://49.232.14.174:7777/\u003e\n\n默认演示账户：\n\n- 用户名：`admin`\n- 密码：`admin`\n\n说明：演示环境直接使用 `runserver`，请谨慎操作，不要修改默认密码。\n\n## 部分截图\n\n![工单页面](https://github.com/caoqianming/django-vue-admin/blob/master/img/ticket.png)\n![用户管理](https://github.com/caoqianming/django-vue-admin/blob/master/img/user.png)\n![数据字典](https://github.com/caoqianming/django-vue-admin/blob/master/img/dict.png)\n![定时任务](https://github.com/caoqianming/django-vue-admin/blob/master/img/task.png)\n\n## 相关项目\n\n如果你需要更复杂、更完整的能力，可以查看：\n\n- [xt_server](https://github.com/caoqianming/xt_server)\n\n该仓库在这一套后端基础上做了进一步重写，包含更完善的权限控制、工作流引擎、运维管理、WebSocket 支持以及更多通用能力。\n\n## 交流\n\n- QQ 群：`235665873`\n- 微信群：\n\n![微信群](http://49.232.14.174:7777/media/wechat_group.jpg)\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcaoqianming%2Fdjango-vue-admin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcaoqianming%2Fdjango-vue-admin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcaoqianming%2Fdjango-vue-admin/lists"}