引言:为什么选择 Django-Vue-Admin?
你是否还在为重复造轮子而苦恼?
Django-Vue-Admin 是一个基于 Django + Vue3 前后端分离的开源后台管理系统,内置 RBAC 权限管理、代码生成器、监控日志等核心模块,能帮你节省 70% 的开发时间!
本文将手把手教你如何二次开发,30 分钟实现一个企业级工单管理系统,并分享高效开发技巧!
一、项目简介与技术栈
- 核心功能:RBAC 权限控制、代码生成、API 文档自动生成、数据可视化
- 技术架构:
- 前端:Vue3 + TypeScript + Element Plus
- 后端:Django3 + Django REST Framework + JWT
- 数据库:MySQL/PostgreSQL/SQLite
- GitHub 地址:https://github.com/liqianglog/django-vue-admin(Star 3.5k+)
二、环境准备(5分钟搞定)
1、克隆项目:
git clone https://github.com/liqianglog/django-vue-admin.git
cd django-vue-admin
2、安装依赖:
# 后端
pip install -r requirements.txt
# 前端
cd frontend
npm install
3、初始化数据库
python manage.py migrate
三、项目结构解析
后端目录(/backend
)
├── apps
│ ├── system # 权限模块
│ └── monitor # 日志监控
├── dva.py # 项目配置
└── urls.py # 路由入口
前端目录(/frontend
)
├── src
│ ├── api # 接口定义
│ ├── views # 页面组件
│ └── router # 路由配置
四、二次开发实战:工单系统
目标:新增工单管理模块(CRUD + 状态流转)
步骤 1:后端开发(Django)
-
创建应用:
python manage.py startapp ticket
-
定义模型(
ticket/models.py
):from django.db import modelsclass Ticket(models.Model):title = models.CharField("工单标题", max_length=100)content = models.TextField("工单内容")STATUS_CHOICES = (('open', '待处理'),('progress', '处理中'),('closed', '已关闭'))status = models.CharField("状态", max_length=20, choices=STATUS_CHOICES, default='open')creator = models.ForeignKey('system.User', on_delete=models.CASCADE)created_at = models.DateTimeField(auto_now_add=True)
-
注册到 Admin(
ticket/admin.py
):from django.contrib import admin from .models import Ticket@admin.register(Ticket) class TicketAdmin(admin.ModelAdmin):list_display = ['title', 'status', 'creator']
-
编写 API 接口(
ticket/views.py
):from rest_framework.viewsets import ModelViewSet from .models import Ticket from .serializers import TicketSerializerclass TicketViewSet(ModelViewSet):queryset = Ticket.objects.all()serializer_class = TicketSerializer
步骤 2:前端开发(Vue3)
-
新增页面组件(
frontend/src/views/ticket/List.vue
):<template><el-table :data="tableData"><el-table-column prop="title" label="标题" /><el-table-column prop="status" label="状态"><template #default="{ row }"><el-tag :type="statusTag[row.status]">{{ row.status }}</el-tag></template></el-table-column></el-table> </template><script setup> import { ref } from 'vue' import { getTicketList } from '@/api/ticket'const tableData = ref([]) const statusTag = { open: 'warning', progress: 'primary', closed: 'success' }getTicketList().then(res => tableData.value = res.data) </script>
-
添加路由配置(
frontend/src/router/modules/ticket.js
):export default {path: '/ticket',component: Layout,children: [{path: 'list',name: 'TicketList',component: () => import('@/views/ticket/List.vue'),meta: { title: '工单管理', icon: 'document' }}] }
五、高级技巧:提升开发效率
-
代码生成器:使用内置工具自动生成 CRUD 代码
python manage.py gen app_name --model=ModelName
-
权限控制:在
system/menu
中配置页面权限 -
接口调试:访问
http://localhost:8000/api/docs/
查看 Swagger 文档
六、部署上线(Docker + Nginx)
# 后端 Dockerfile
FROM python:3.9
RUN pip install gunicorn
COPY . /app
WORKDIR /app
CMD ["gunicorn", "dva.wsgi:application", "--bind", "0.0.0.0:8000"]
# Nginx 配置
server {listen 80;location /api {proxy_pass http://backend:8000;}location / {root /frontend/dist;try_files $uri $uri/ /index.html;}
}
七、总结与资源
- 本文代码仓库:https://github.com/yourname/django-vue-admin-demo
- 扩展学习:
- 官方文档:Django-Vue-Admin Docs
- Vue3 实战课程:慕课网《Vue3 + TS 仿知乎专栏》
立即 Star 项目并开始你的高效开发之旅吧! 🚀
关注我的 CSDN 主页,获取更多全栈开发实战教程! 🔥