django-vue-admin脚手架快速开发CRUD教程

本页面示例中的 project 均为demo名,可替代成自己的项目名

#需求

  • 创建一个项目管理app;
  • 字段包含:项目名称、项目编码、项目负责人;
  • 功能:包含项目管理的增删改查、导出。

#后端

#1. 创建App

  • 通过命令创建App python3 manage.py createapp project

img

#2. 创建 models 模型

    1. dvadmin-backend/apps/project/models/ 目录下,创建 project.py 文件(models目录下可创建多个模型文件,建议一个.py 文件为一个models模型)
    1. 编写项目管理模型内容 dvadmin-backend/apps/project/models/project.py,如下:
from django.conf import settings
from django.db.models import CharField, ForeignKey, CASCADE, SET_NULL

from vadmin.op_drf.models import CoreModel


# 继承框架封装的 模型类 CoreModel
class Project(CoreModel):
    name = CharField(max_length=8, verbose_name='项目名称')
    code = CharField(max_length=8, verbose_name='项目编码')
    # 在关联用户时,建议使用 to=settings.AUTH_USER_MODEL 进行关联
    person = ForeignKey(to=settings.AUTH_USER_MODEL, null=True, verbose_name='项目负责人', related_name='project_person',
                        on_delete=SET_NULL, db_constraint=False)
    # 在普通一多一、一对多、多对多时,to='App名.模块名' 进行关联
    dept = ForeignKey(to='permission.dept', on_delete=CASCADE, verbose_name="项目所属部门", related_name='project_dept',
                      db_constraint=False)

    class Meta:
        verbose_name = '项目管理'
        verbose_name_plural = verbose_name

    def __str__(self):
        return f"{self.name} 项目"

    
    1. dvadmin-backend/apps/project/models/__init__.py 中导入模型
from .project import Project
 
    

#3. 迁移数据库文件

  • 执行迁移命令:
    • python3 manage.py makemigrations project
    • python3 manage.py migrate project
  • 迁移成功后,通过数据库可查看到

img

  • 可看到字段比模型中多出几个,是因为继承了框架封装的 CoreModel 所带的。

img

#4. 创建过滤器、序列化器、视图、路由接口

    1. 创建过滤器,通过 dvadmin-backend/apps/project/filters.py 文件中,添加过滤器内容:
import django_filters

from .models.project import Project


class ProjectFilter(django_filters.rest_framework.FilterSet):
    """
    项目管理 简单序过滤器
    """
    # 通过 lookup_expr 可进行模糊查询,其他配置可自行百度
    name = django_filters.CharFilter(lookup_expr='icontains')

    class Meta:
        model = Project
        exclude = ('description', 'creator', 'modifier')

    
  • 2) 创建序列化器
from rest_framework import serializers

from .models.project import Project
from vadmin.op_drf.serializers import CustomModelSerializer


# ================================================= #
# ************** 项目管理 序列化器  ************** #
# ================================================= #
class ProjectSerializer(CustomModelSerializer):
    """
    项目管理 简单序列化器
    """

    class Meta:
        model = Project
        fields = '__all__'


class ProjectCreateUpdateSerializer(CustomModelSerializer):
    """
    项目管理 创建/更新时的列化器
    """

    # 此处可写定制的 创建/更新 内容
    def validate(self, attrs: dict):
        return super().validate(attrs)

    class Meta:
        model = Project
        fields = '__all__'


class ExportProjectSerializer(CustomModelSerializer):
    """
    导出 项目管理 简单序列化器
    """
    person__username = serializers.SerializerMethodField(read_only=False)
    dept__deptName = serializers.SerializerMethodField(read_only=False)

    def get_person__username(self, obj):
        return "" if not hasattr(obj, 'person') else obj.person.username

    def get_dept__deptName(self, obj):
        return "" if not hasattr(obj, 'dept') else obj.dept.deptName

    class Meta:
        model = Project
        fields = ('id', 'name', 'code', 'person', 'person__username', 'dept', 'dept__deptName', 'creator', 'modifier',
                  'description')

 
    1. 创建视图
from .filters import ProjectFilter
from .models.project import Project
from .serializers import ProjectSerializer, ProjectCreateUpdateSerializer, ExportProjectSerializer
from apps.vadmin.op_drf.filters import DataLevelPermissionsFilter
from apps.vadmin.op_drf.viewsets import CustomModelViewSet
from apps.vadmin.permission.permissions import CommonPermission


class ProjectModelViewSet(CustomModelViewSet):
    """
    项目管理 的CRUD视图
    """
    queryset = Project.objects.all()
    serializer_class = ProjectSerializer  # 序列化器
    create_serializer_class = ProjectCreateUpdateSerializer  # 创建/更新时的列化器
    update_serializer_class = ProjectCreateUpdateSerializer  # 创建/更新时的列化器
    filter_class = ProjectFilter  # 过滤器
    extra_filter_backends = [DataLevelPermissionsFilter]  # 数据权限类,不需要可注释掉
    update_extra_permission_classes = (CommonPermission,)  # 判断用户是否有这条数据的权限
    destroy_extra_permission_classes = (CommonPermission,)  # 判断用户是否有这条数据的权限
    create_extra_permission_classes = (CommonPermission,)  # 判断用户是否有这条数据的权限
    search_fields = ('name',)  # 搜索
    ordering = ['create_datetime']  # 默认排序
    # 导出
    export_field_data = ['项目序号', '项目名称', '项目编码', '项目负责人', '项目所属部门', '创建者', '修改者', '备注']  # 导出
    export_serializer_class = ExportProjectSerializer  # 导出序列化器
    # 导入
    import_field_data = {'name': '项目名称', 'code': '项目编码', 'person': '项目负责人ID', 'dept': '部门ID'}
    import_serializer_class = ExportProjectSerializer


    
    1. 创建路由接口
from django.urls import re_path
from rest_framework.routers import DefaultRouter

from project.views import ProjectModelViewSet

router = DefaultRouter()
router.register(r'project', ProjectModelViewSet)

urlpatterns = [
    # 导出项目
    re_path('project/export/', ProjectModelViewSet.as_view({'get': 'export', })),
    # 项目导入模板下载及导入
    re_path('project/importTemplate/',
            ProjectModelViewSet.as_view({'get': 'importTemplate', 'post': 'importTemplate'})),
]

urlpatterns += router.urls
 

#前端

#1. 创建 .vue 文件和 api 文件

  • 在目录dvadmin-ui/src/api/project/下创建project.js

img

代码如下:

import request from '@/utils/request'

// 查询项目列表
export function listProject(query) {
  return request({
    url: '/project/project/',
    method: 'get',
    params: query
  })
}

// 查询项目详细
export function getProject(projectId) {
  return request({
    url: '/project/project/' + projectId + '/',
    method: 'get'
  })
}

// 新增项目
export function addProject(data) {
  return request({
    url: '/project/project/',
    method: 'post',
    data: data
  })
}

// 修改项目
export function updateProject(data) {
  return request({
    url: '/project/project/' + data.id + '/',
    method: 'put',
    data: data
  })
}

// 删除项目
export function delProject(projectId) {
  return request({
    url: '/project/project/' + projectId + '/',
    method: 'delete'
  })
}

// 导出项目
export function exportProject(query) {
  return request({
    url: '/project/project/export/',
    method: 'get',
    params: query
  })
}

// 下载项目导入模板
export function importTemplate() {
  return request({
    url: '/project/project/importTemplate/',
    method: 'get'
  })
}

// 项目导入
export function importsProject(data) {
  return request({
    url: '/project/project/importTemplate/',
    method: 'post',
    data: data
  })
}


    
  • 在目录dvadmin-ui/src/views/project/project/下创建index.vue( 第一个 project 目录类似后端app,第二个 project目录类似后端视图,好处:结构会清晰化),内容如下:

img

#2. 添加菜单

  • 在前端系统中,权限管理 ———— 菜单管理 ———— 添加菜单

img

  • 添加 项目管理侧边栏

img

  • 添加 项目 二级末级菜单

img

  • 添加 增、删、改、查、导入、导出按钮

img

  • 最终添加完成后如下:

img

  • 刷新后即可看到左侧菜单

img

#3. vue 中实现增、删、改、查、导入、导出

<template>
  <div>
    <model-display :listApi="listApi" :fields="fields" :funcs="funcs"></model-display>
  </div>
</template>

<script>
  import * as Project from '../../../api/project/project';

  export default {
    name: "project",
    data() {
      return {
        listApi: Project.listProject,
        fields: [
          {prop: 'id', label: 'ID', show: false, unique: true, required: false},
          {prop: 'name', label: '项目名称', show: true, search: true, form: true, required: true,},
          {prop: 'code', label: '项目编码', show: true, search: true, form: true, required: true,},
          {prop: 'person', label: '项目负责人', show: true, search: true, sortable: true, type: 'users', form:true,required: true,},
          {prop: 'dept', label: '部门', show: true, search: true, type: 'depts', form:true,required: true},
          {prop: 'create_datetime', label: '创建时间', show: true, search: true, type: 'date'},
          {prop: 'creator_name', label: '创建者', show: true, search: false},
          {prop: 'description', label: '描述', show: true, search: false, form:true}
        ],
        funcs: [
          {type: 'add', label: '新增', permis: ['project:project:post'], 'icon': 'el-icon-plus', api:Project.addProject},
          {type: 'update', label: '修改', permis: ['project:project:{id}:put'], api: Project.updateProject},
          {type: 'delete', label: '删除', permis: ['project:project:{id}:delete'], api: Project.delProject},
          {type: 'export', label: '导出', permis: ['project:project:export:get'], api: Project.exportProject},
          {type: 'import', label: '导入', permis: ['project:project:importTemplate:get','project:project:importTemplate:post'], api: Project.importsProject, template_api:Project.importTemplate},
          {type: 'select', label: '详情', permis: ['project:project:get'], api: Project.getProject},
        ],
      }
    },
    created() {
    },
    mounted() {
    },
    methods: {
    }

  }
</script>
 

#完成

  • 刷新页面打开 项目管理——项目,则是一个简单完整的 CRUD 完成。
  • 如有问题可参考:https://gitee.com/liqianglog/django-vue-admin/tree/demo_project 分支代码。

参考连接:https://django-vue-admin.com/document/crud.html

  • 7
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 你可以回答这个问题。django-vue-admin 是一个基于 DjangoVue.js 的全栈开发框架,可以快速搭建后台管理系统。它提供了丰富的组件和插件,可以帮助开发快速构建出美观、易用的管理界面。 ### 回答2: django-vue-admin是一个基于DjangoVue.js开发的开源管理系统框架,旨在帮助开发快速构建和定制现代化的管理系统。它采用前后端分离的架构,后端使用Django提供API接口,前端使用Vue.js进行展示和交互。 使用django-vue-admin开发者可以快速搭建一个具备基本功能的管理系统。框架提供了一套完整的通用模型和视图,开发者只需根据自己的需求进行配置和扩展即可实现快速开发。同时,它采用了模块化和组件化的设计,开发者可以方便地替换和定制界面的各个组件,实现个性化的界面展示。 django-vue-admin还提供了丰富的功能模块,如用户管理、权限管理、角色管理、菜单管理等,开发者可以根据项目需要进行选择和集成。框架还支持多语言和多主题的配置,方便开发者根据不同用户需求进行界面定制。 此外,django-vue-admin还面向中小型项目进行了性能优化,采用了异步加载、缓存和CDN加速等技术,提高了系统的响应速度和用户体验。 总的来说,django-vue-admin是一个强大而灵活的管理系统开发框架,它简化了开发者的开发流程,提高了开发效率。无论是快速搭建简单的管理系统,还是进行个性化的定制开发,都可以选择django-vue-admin作为开发工具。 ### 回答3: django-vue-admin 是一个用于快速开发后台管理系统的开源项目。它的主要特点是结合了 DjangoVue.js 框架的优势,使开发者能够高效地创建功能完善、界面友好的管理系统。 django-vue-admin 提供了一套基础的后台管理功能,包括用户管理、角色管理、权限管理、日志管理等。开发者可以根据自己的需求进行功能定制和扩展。 django-vue-admin 的前端使用了 Vue.js 框架,通过组件化的方式构建用户界面,并且使用了 Element-UI 组件库来提供丰富的UI组件。这使得开发者能够快速搭建出现代化、响应式的管理系统界面。后端则使用了 Django 框架,提供了强大的数据处理和权限控制能力。 在开发上,django-vue-admin 使用了前后端分离的架构,前端和后端通过 API 进行通信。这使得开发者可以独立地进行前后端开发,提高了开发效率和团队协作能力。同时,由于前后端分离的优势,django-vue-admin 的性能也得到了明显的提升。 总之,django-vue-admin 是一个功能强大、易用、高效的后台管理系统开发框架。它能够帮助开发快速开发出现代化的后台管理系统,并且具备良好的扩展能力。无论是个人开发者还是企业开发团队,都可以利用 django-vue-admin 来构建稳定、高效的管理系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学亮编程手记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值