Django实现接口自动化平台(十)自定义action names【持续更新中】

news2024/11/19 20:27:14

相关文章:

Django实现接口自动化平台(九)环境envs序列化器及视图【持续更新中】_做测试的喵酱的博客-CSDN博客

深入理解DRF中的Mixin类_做测试的喵酱的博客-CSDN博客 

python中Mixin类的使用_做测试的喵酱的博客-CSDN博客 

本章是项目的一个分解,查看本章内容时,要结合整体项目代码来看:

python django vue httprunner 实现接口自动化平台(最终版)_python+vue自动化测试平台_做测试的喵酱的博客-CSDN博客

 

一、背景

学生信息(id,name,age,address)

查看数据列表(学生列表)时,需要两种展示形式。

形式一:直接展示学生详细信息的列表 .list()

形式二:只展示id与name学生信息的列表 .names()

形式一与形式二,对应的序列化器是不一样的。

所以自定义names() acntion ,来对应另一个序列化器

二、自定义action

# -*- coding: utf-8 -*-

import os
from datetime import datetime

from django.conf import settings
from rest_framework.decorators import action
from rest_framework.response import Response

from envs.models import Envs
from utils import common


class NamesMixin:
    @action(methods=['GET'], detail=False)
    def names(self, request, *args, **kwargs):
        response = super().list(request, *args, **kwargs)
        return response

    def paginate_queryset(self, queryset):
        """
        names action禁用分页功能
        :param queryset:
        :return:
        """
        if self.action == "names":
            return
        else:
            return super().paginate_queryset(queryset)

    def filter_queryset(self, queryset):
        """
        names action禁用过滤功能
        :param queryset:
        :return:
        """
        if self.action == "names":
            return self.queryset
        else:
            return super().filter_queryset(queryset)

1、自定义names action

2、当action 为names时:

当action 为names时,不做分页、过滤功能的处理。

这里的 def paginate_queryset(self, queryset): 

def filter_queryset(self, queryset): 方法,是重写。

重写的

 EnvsViewSet(NamesMixin, viewsets.ModelViewSet-> ModelViewSet->GenericViewSet->GenericAPIView 类下的方法。

GenericAPIView源码:

 三、Mixin类应用

Mixin类需要配合其他类一起使用,视图类:

from rest_framework import viewsets
from rest_framework import permissions
from .models import Envs
from . import serializers
from utils.mixins import NamesMixin


class EnvsViewSet(NamesMixin, viewsets.ModelViewSet):
    queryset = Envs.objects.all()
    serializer_class = serializers.EnvsModelSerializer
    permission_classes = [permissions.IsAuthenticated]

    def get_serializer_class(self):
        if self.action == "names":
            return serializers.EnvsNamesSerializer
        else:
            return self.serializer_class

get_serializer_class 方法,也是重写的GenericAPIView(views.APIView) 类的方法。

一共重写了三个方法

  • 分页功能:def paginate_queryset(self, queryset)
  • 过滤功能:def filter_queryset(self, queryset)
  • 选择序列化器:def get_serializer_class(self):

分页、过滤 在 自定义Mixin类,下重写,是为了方便封装,这是通用的

选择序列化器 在 具体应用的视图类下,重写,这个是个性化的,不同的视图类,需要指定不同的序列化器。

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

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

相关文章

高数笔记5(第一章函数 极限 连续-第三节-函数的连续性)

目录 第三节 函数的连续性(1)函数的连续性例1(补充定义,函数连续)例4(无穷小*有界量)例6 (补充定义,三角函数的代换的妙用) (2)连续函…

7.带你入门matlab偏斜度和峰度(matlab程序)

峰度(Kurtosis)与偏态(Skewness)就是量测数据正态分布特性的两个指标。 峰度(Kurtosis) 峰度衡量数据分布的平坦度(flatness),即数据取值分布形态陡缓程度的统计量。它…

C#,数值计算——柯西分布(Cauchy distribution)的计算方法与源程序

柯西分布(Cauchy distribution)简介 The Cauchy distribution, also called the Lorentzian distribution or Lorentz distribution, is a continuous distribution describing resonance behavior. It also describes the distribution of horizontal …

ASEMI快恢复二极管MUR2080CTR资料,MUR2080CTR参数

编辑-Z MUR2080CTR是一种高压、超快恢复整流二极管。它通常用于各种电子应用,如电源、逆变器和电机控制电路。该二极管设计用于处理高压和高频开关,适用于需要快速高效整流的应用。 MUR2080CTR二极管的一个关键特性是其超快的恢复时间。这意味着它可以非…

从零开始 Spring Cloud 2:Eureka 注册中心

从零开始 Spring Cloud 2:Eureka 注册中心 图源:laiketui.com Eureka 常被用作 Spring Cloud 的注册中心,用于注册微服务的接口提供方。 在上一篇文章中,我们实现了两个子模块互相调用接口,但存在一个缺陷&#xff0…

旅游管理系统的设计与实现(论文+源码)_kaic

摘 要 旅游业走过了改革开放,到现在依旧蓬勃发展。但是放眼国际社会,我们在旅游业发展的深度和广度上所做的努力还远远不够。在中国,旅游业也将成为经济崛起中的重要一环。目前,我们生活在一个信息时代里。无论是工作,…

哈希表的原理

哈希概念 线性表、树结构的查找方式都是以关键字的比较为基础,查找效率比较低,顺序表的时间复杂度是O(n),平衡树中为树的高度,即O(logn),搜素的效率取决于搜索过程的元素…

归并排序的递归和非递归

基本思想 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide andConquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序&a…

OpenCV项目开发实战--详细介绍如何进行边缘轮廓检测 (Python/C++)-附源码

使用轮廓检测​​,我们可以检测对象的边界,并轻松在图像中定位它们。它通常是许多有趣应用的第一步,例如图像前景提取、简单图像分割、检测和识别。 因此,让我们使用 OpenCV 来了解轮廓和轮廓检测,并亲眼看看如何使用它们来构建各种应用程序。 轮廓在计算机视觉中的应用

latex2【图片、公式、矩阵】

图片 语法: \includegraphics{排队论模型.png} 看起来很别扭是吧,需要进行“修饰”: 当然,这样也很丑,一般写论文可以用以下的格式: \begin{figure}[H] \caption{问题一模型示意图} \label{paiduimx} …

【企业架构工具】2023 年 18 大企业架构工具

这些流行和新兴的 EA 工具为企业提供了支持企业架构和数字化转型所需的一切。 企业架构系统并不总是必不可少的。据推测,在 1940 年代,国际商业机器公司的一位领导人小托马斯沃森 (Thomas Watson Jr.) 曾说过:“我认为大约有 5 台计算机的全球…

基于SpringBoot+vue的校园疫情防控系统设计与实现

博主介绍: 大家好,我是一名在Java圈混迹十余年的程序员,精通Java编程语言,同时也熟练掌握微信小程序、Python和Android等技术,能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

Linux内核网络-拥塞控制系列(一)

谈起网络拥塞控制,大家可能很熟悉八股文中的"加法增大“、”乘法减小“、”慢开始“、“拥塞避免”、“快重传”、“快恢复”等概念。没错,这是一种经典网络拥塞控制算法的基础理论,但在实际的实现时不同的拥塞控制算法,有很…

【Android Camera开发】深入理解相机ISP(图像信号处理)必看文章

​原文:https://blog.51cto.com/u_16081664/6224003 作者:mb64411cc0e9333 凡是和图像领域工作的人,都会经常听到ISP(Image Signal Process,图像信号处理),知道ISP对图像质量非常重要。比如华为…

电能管理系统在路店上的应用 安科瑞 许敏

摘要:随着企业改革的不断深入,对现代化用电管理的水平要求越来越高,准确、快速、经济的获得用电回路的各类数据进行用电分析、负荷管理、表计运行状况监测、电费自动结算的基础。同时也是提高企业经济效益的有效手段。近年来技术人员对监控系…

嵌入式程序开发者的数量剧增

随着物联网、智能设备和嵌入式系统的快速发展,嵌入式程序开发领域的需求不断增长,因此嵌入式程序开发者的数量也在剧增。这种趋势在过去几年中已经变得非常明显。 以下是导致嵌入式程序开发者数量剧增的一些主要原因: 我这里刚好有嵌入式、单…

Mac平台下如何制作pkg安装包以及rpath设置

打包工具介绍 Mac平台规范包可以使用Packages工具。下载地址 打包前准备工作 创建一个目录 macProject macProject目录中是以下目录结构 myProject.app└── Contents├── Info.plist├── MacOS├── res├── libmymath.dylib├── Frameworks└── Resources├…

Hive多行转多列,多列转多行

hive中的行列转换包含单行、多行、单列、多列,所以一共有四种组和转换结果。 一、多行转多列 原始数据表 目标结果表 分析:目标表中的a和b是用分组形成,所以groupby字段选用原始表中col1,c、d、e是原始表中的行值,…

数据结构(王道)——线性表的存储结构之循环表

一、循环单链表 定义: 循环单链表代码实现 创建并初始化、判断循环单链表是否为空、判断结点p是否为循环单链表的表尾结点的代码操作。 二、循环双链表 定义: 循环双链表代码实现 创建并初始化、判断循环双链表是否为空、判断结点p是否为循环双链表的…

橙河网络:怎么搭建海外问卷网站呢?

大家好,我是橙河,如果你想要搭建海外问卷网站赚钱,看我这篇文章就行了。 搭建网站,本身并不复杂,自己会敲代码就自己搞,不会就花点钱外包给别人。 搭建好问卷网站以后,重点来了,你需…