【Django项目开发】部门管理模块的开发(九)

news2024/11/20 0:29:24

在这里插入图片描述


文章目录

  • 一、模型类设计
  • 二、视图设计
    • 1.都有哪些接口
  • 三、序列化器类设计
  • 四.分页操作
    • 1.utils工具中定义pagination.py
    • 2.视图类中使用
  • 五.路由配置

一、模型类设计

一个部门下面可能会有很多子部门,一个子部门上面可能会有父部门;即部门内部之间进行关联,称为树形的关联结构
关联自己用self

部门与用户的关系为一对多

class DeptModel(BaseModel):
    """
    todo 用户所在部门的模型
     一个部门下面可能会有很多子部门,一个子部门上面可能会有父部门;即部门内部之间进行关联,称为树形的关联结构
     关联自己用self
    """
    name = models.CharField('部门名称', unique=True, max_length=20)
    address = models.CharField('部门所在地址', null=True, blank=True, max_length=256)
    parent = models.ForeignKey('self',
                               null=True,
                               blank=True,
                               related_name='chlidren',
                               on_delete=models.CASCADE,
                               verbose_name='部门所在的父部门')

    def __str__(self):
        return self.name

    class Meta:
        db_table = 't_dept'
        verbose_name = '部门表'
        verbose_name_plural = verbose_name
        ordering = ['id']

二、视图设计

1.都有哪些接口

部门的增加:create
查询单个部门:retrieve
查询所有的部门:list
修改部门(属性):update
局部修改部门:partial_update
删除部门:destroy
批量删除部门:multiple_delete

针对list接口而言:
查询所有的部门
请求参数有pid,代表父部门的ID
1、如果没有传pid,则查询所有的部门
2、如果传过来的pid=0,则表示查询顶级部门列表
3、如果传过来的非0,则查询某个父部门下的所有子部门列表

from rest_framework.viewsets import ModelViewSet
from erp_project.utils.base_views import MultipleDestroyMixin
from erp_system.models import DeptModel
from erp_system.serializer.dept_serializer import DeptSerializer
from rest_framework.decorators import action
from rest_framework.response import Response
from erp_project.utils.pagination import GlobalPagination
from rest_framework.permissions import IsAuthenticated

class DeptView(ModelViewSet, MultipleDestroyMixin):
    """
        create:
        部门--新增,

        部门新增,status:201(成功),return:新增部门信息

        list:
        查询所有的部门
        请求参数有pid,代表父部门的ID
        1、如果没有传pid,则查询所有的部门
        2、如果传过来的pid=0,则表示查询顶级部门列表
        3、如果传过来的非0,则查询某个父部门下的所有子部门列表
        update:
        修改部门,部门本身的信息(属性)

        destroy:
        部门--删除 单个部门

        部门删除,status:204,return:None

        partial_update:
        局部修改部门,部门本身的信息(属性)

        multiple_delete:
        部门--批量删除

        部门删除,status:204,return:None

        retrieve:
        查询单个部门

        返回单个部门,status:200,return:部门列表
    """
    queryset = DeptModel.objects.all()
    serializer_class = DeptSerializer
    pagination_class = GlobalPagination
    permission_classes = [IsAuthenticated]

    def get_queryset(self):
        """
        请求参数有pid,代表父部门的ID
        1、如果没有传pid,则查询所有的部门
        2、如果传过来的pid=0,则表示查询顶级部门列表
        3、如果传过来的非0,则查询某个父部门下的所有子部门列表
        :return:
        """
        dept_id = self.request.query_params.get('dept_id', None)

        if not dept_id:
            queryset = DeptModel.objects.all()
            return queryset

        else:
            dept_id = int(dept_id)

            if dept_id == 0:
                queryset = DeptModel.objects.filter(parent_id__isnull=True).all()
                return queryset
            else:
                queryset = DeptModel.objects.filter(parent_id=dept_id)
                return queryset

在ORM框架种,如果某一个属性为空:属性名称_ _isnull=True

只要是关联属性用:关联字段_ _其他字段,进行查询

三、序列化器类设计

from rest_framework import serializers
from erp_system.models import DeptModel


class DeptSerializer(serializers.ModelSerializer):

    '''
    用户所在部门的序列化
    '''
    #第一种方式
    #create_time=serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S",read_only=True)

    class Meta:
        model=DeptModel
        fields='__all__'

        #第二种方式
        extra_kwargs={
            'create_time':{
                "format":"%Y-%m-%d %H:%M:%S",
                "read_only":True
            }
        }

四.分页操作

1.utils工具中定义pagination.py

from rest_framework.pagination import PageNumberPagination

class GlobalPagination(PageNumberPagination):
    #项目中默认的分页配置
    page_size = 10  #每页显示的数据条数
    page_size_query_param = 'size'  #前端发送每页数目的参数名,例如:size=20
    max_page_size = 100         #前端最多设置每页显示的数量

2.视图类中使用

from rest_framework.viewsets import ModelViewSet
from erp_project.utils.base_views import MultipleDestroyMixin
from erp_system.models import DeptModel
from erp_system.serializer.dept_serializer import DeptSerializer
from rest_framework.decorators import action
from rest_framework.response import Response
from erp_project.utils.pagination import GlobalPagination

class DeptView(ModelViewSet, MultipleDestroyMixin):
    
    queryset = DeptModel.objects.all()
    serializer_class = DeptSerializer
    pagination_class = GlobalPagination

五.路由配置

from django.urls import path,re_path,include
from rest_framework_jwt.views import obtain_jwt_token
from . import views
from rest_framework import routers
from erp_system.views.menu import MenuView
from erp_system.views.user import RegisterView
from erp_system.views.roles import RolesView
from erp_system.views.permissions import PermissionsView
from erp_system.views.dept import DeptView

router=routers.DefaultRouter()

router.register(r'menus',MenuView)
router.register(r'roles',RolesView)
router.register(r'permissions',PermissionsView)
router.register(r'depts',DeptView)

urlpatterns = [
    re_path(r'^user/login/$',obtain_jwt_token),    #以/结尾  JWT签发和认证token的视图类
    re_path(r'',include(router.urls)),
    re_path(r'user/register/$',RegisterView.as_view()),      #用户注册路由
]

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/159480.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Grapecity DataViewsJS JavaScript Crack

Grapecity DataViewsJS一个完整的 React 数据展示和数据网格平台 通过从各种不同的演示视图中进行选择,包括树、卡片、砖石、网格、时间线、甘特图、日历和网格,超越传统的表格显示。采集 by Ω578867473 免费无限开发者许可!只为部署付费 快…

Hexo博客搭建(简化版)

Hexo博客搭建(简化版) 一、环境搭建 1.1 Git Git官网-下载界面 > git --version1.2 Node.js 1.2.1 下载安装Node.js Node.js官网下载界面 > node --version1.2.2 Hexo与Node.js Hexo versionMinimum (Node.js version)Less than (Node.js …

2023年我花费数小时整理的Java常用类文档,建议收藏学习

推荐学习专栏:【Java 编程基础教程系列】,从入门到就业精通,买不了吃亏,买不了上当!! 文章目录1. 基本类型的包装类1.1 概念1.2 常用的属性1.3 常用的方法1.4 自动装箱和自动拆箱2. 字符串类2.1 String 类2…

二分模板:查找数的范围、数的三次方根

内容摘自ACWING&#xff0c;一个很好的算法学习平台。 二分模板 判断左边界 当q[mid]>x时&#xff0c;待查找元素只会在mid左边&#xff0c;令rmid。 while( l < r ) {mid l r >> 1;if(q[mid] > x) r mid;else l mid 1; }判断右边界 当q[mid]<x&…

Spring项目中自动打印执行SQL和耗时,这款神级插件你值得拥有

这里写自定义目录标题参考简介集成方式如何使用步骤一&#xff0c;引入P6Spy。步骤二&#xff0c;修改数据源的配置。步骤三&#xff0c;新建spy.properties文件&#xff0c;放在resources目录下。步骤四&#xff0c;新建一个类实现MessageFormattingStrategy&#xff0c;并重写…

spring cache @Cacheable的使用

Cacheable的使用1.Cacheable1.1 cacheNames value1.2 关联多个缓存名1.3 key 和 keygenerator1.4 CacheManager CacheResolver1.5 sync1.6 condition1.7 unless2.CachePut 放置缓存3.CacheEvict 删除缓存4.测试代码5.默认缓存和redis缓存6.过程中的问题1.Cacheable 注解在方法…

剩余系,欧拉定理,扩展欧拉定理

剩余类&#xff08;同余类&#xff09; 给定一个正整数n&#xff0c;以 r ∈[0, n -1]表示所有形如的整数组成的集合称为模n的剩余类。例n 5,r 3,则C3 5x &#xff0b;3为模5的一个剩余类。 完全剩余系&#xff08;完系&#xff09; 给定一个正整数n&#xff0c;在模n的剩…

kafka生产者API

生产者工作流程 首先生产者调用send方法发送消息后&#xff0c;会先经过拦截器&#xff0c;接着进入序列化器。序列化器主要用于对消息的Key和Value进行序列化。接着进入分区器选择消息的分区。 上面这几步完成之后&#xff0c;消息会进入到一个名为RecordAccumulator的缓冲队…

javaWeb servlet

使用案例&#xff1a; <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> 导了包之…

五指山[《信息学奥赛一本通》](扩展欧几里得算法)

题目如下&#xff1a; 题解 or 思路 我们可以将题目 抽象 成数学模型 xkd≡y(modn)x kd \equiv y\ (mod\ n)xkd≡y (mod n) xkdya∗nx kd y a * nxkdya∗n k∗d−a∗ny−xk*d - a*n y - xk∗d−a∗ny−x 式子 在这里 kkk, aaa 是变量&#xff0c;其余是常数 我们可以扩展…

Java 快速开发几 MB 独立 EXE,写图形界面很方便

Java 写的桌面软件带上运行时只有 6 MB&#xff0c;而且还是独立 EXE 文 件&#xff0c;是不是难以置信&#xff1f; 想一想 Electron 没写多少功能就可能超过百 MB 的体积&#xff0c;Java 写的桌面软件算不算得上小、轻、快呢&#xff1f; aardio 可以支持很多编程语言&…

什么是 智慧行业 App?

智慧行业 是帮助大家将智能设备和边缘网关设备添加到云开发项目的移动端 App。App 提供 iOS 和安卓版本&#xff0c;您可以在对应系统的应用商店下载。 应用场景 智慧行业 能帮助用户将不同网络协议的设备&#xff08;包含边缘网关子设备&#xff09;配置到相关项目中。开发者…

对于TP, TN, FP, FN, Pre, Recall的举例

对于以上参数的概念以及理解&#xff0c;请参考我的文章&#xff1a; 机器学习中TP&#xff0c;TN&#xff0c;FP&#xff0c;FN&#xff0c;Acc&#xff0c;Pre&#xff0c;Sen, Rec的含义_汤宪宇的博客-CSDN博客_机器学习accz 这里我们在将上面概念的定义重新梳理一遍&#…

深入源码剖析 Mybatis 缓存机制

深入源码剖析 Mybatis 缓存机制 Mybatis 为了减轻数据库压力&#xff0c;提高数据库性能。提供了两级缓存机制 一级缓存 sqlSession 级别缓存&#xff0c;缓存的数据只在 sqlSession 内有效&#xff0c;一级缓存默认为我们开起来&#xff0c;不需要我们手动操作&#xff0c;而…

【Dash搭建可视化网站】项目14:美国机场交通数据可视化看板制作步骤详解

美国机场交通数据可视化看板制作步骤详解1 项目效果图2 项目架构3 文件介绍和功能完善3.1 assets文件夹介绍3.2 app.py和index.py文件完善3.3 sider.py文件完善3.4 mapchart.py文件完善3.5 barchart.py文件完善3.6 api.py和api.ipynb文件完善4 样式修改4.1 整体样式修改4.2 sid…

联合证券|A股汽车板块爆发,北向资金半日净买入43亿

今日上午&#xff0c;A股商场震动胶着&#xff0c;轿车、电力设备、通信、机械设备等板块领涨。房地产、美容护理、商贸零售等板块领跌。 北向资金再度成为商场重要亮点之一&#xff0c;半个交易日净买入约43亿元。至此&#xff0c;2023年1月以来&#xff0c;北向资金累计净买入…

Jmeter常用函数

1、生成随机数函数 ${__Random(m,n)}&#xff0c;其中m,n参数是必填 2、 生成随机日期函数${__RandomDate(dateTimeFormat,from,end,locale,var)}&#xff0c;其中end是必选的&#xff0c;代表最大的日期&#xff1b; 3、 随机生成字符串函数${__RandomString(length,chars,)}…

Linux---vim编辑器

目录 1. vim的基本概念 2. vim正常/命令模式命令集 3. vim底行模式命令集 1. vim的基本概念 vim是Linux下一款常用编辑器&#xff0c;vim的三种模式(其实有好多模式&#xff0c;主要掌握这3种即可),分别是命令模式&#xff08;command mode&#xff09;、插入模式&#xff0…

Synchronized锁原理及 ConcurrentHashMap

文章目录一、Synchronized原理加锁过程锁消除锁粗化二、线程安全的集合类多线程环境使用ArrayList多线程环境使用队列多线程环境下使用哈希表一、Synchronized原理 我们表面看到的&#xff0c;两个线程针对同一对象加锁&#xff0c;就会产生阻塞等待&#xff0c;但实际我们的S…

2023我的创作纪念日

文章目录机缘收获日常憧憬机缘 这个博客还是我上大一的时候注册的&#xff0c;在大一、大二、大三期间更多的是为了方便搜索&#xff0c;学校里边的习题大部分是可以在CSDN上找到的。真正写博客是在大三下学习实习&#xff0c;当时为了方便记录实习中遇到的问题。在C站对我影响…