Django实现接口自动化平台(九)环境envs序列化器及视图【持续更新中】

news2024/11/25 8:23:56

相关文章:

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

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

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

一、项目环境的应用场景

1.1 环境说明:

1、项目运行时,可以选择一套环境来运行

2、环境里,主要就是这个项目的host

1.2 环境的接口及应用场景

 

接口列表

请求方式URI对应action实现功能
GET/envs/.list()查询env列表
POST/envs/.create()创建一条数据
GET/envs/{id}/.retrieve()检索一条env的详细数据
PUT/envs/{id}/update()更新一条数据中的全部字段
PATCH/envs/{id}/.partial_update()更新一条数据中的部分字段
DELETE/envs/{id}/.destroy()删除一条数据
GET/envs/names/.names() 自定义查询env列表

1、查询env列表 .list()

GET/envs/.list()查询env列表

注意:

1、列表涉及到分页 

2、创建一条env .create()

 3、查看详情与编辑 .retrieve()  update() .partial_update()

  • 查看 .retrieve() 
  • 更新 update()  partial_update()

 4、env列表 names

 已经有list,为什么还要自定义action names:

  • list 有分页,names没有分页
  • list展示的项目数据,names只展示id 与 name

二、数据模型 model

models.py 

from django.db import models

from utils.base_models import BaseModel


class Envs(BaseModel):
    id = models.AutoField(verbose_name='id主键', primary_key=True, help_text='id主键')
    name = models.CharField(verbose_name='环境名称', max_length=200, unique=True, help_text='环境名称')
    base_url = models.URLField(verbose_name='请求base url', max_length=200, help_text='请求base url')
    desc = models.CharField(verbose_name='简要描述', max_length=200, help_text='简要描述')

    class Meta:
        db_table = 'tb_envs'
        verbose_name = '环境信息'
        verbose_name_plural = verbose_name
        ordering = ('id',)

    def __str__(self):
        return self.name

 环境模块,目前只有一个字段,就是

base_url = models.URLField(verbose_name='请求base url', max_length=200, help_text='请求base url')

整个项目的host地址

三、序列化器 serializers

serializers.py

from rest_framework import serializers

from .models import Envs


class EnvsModelSerializer(serializers.ModelSerializer):

    class Meta:
        model = Envs
        exclude = ('update_datetime',)
        extra_kwargs = {
            'create_datetime': {
                'read_only': True,
                'format': '%Y年%m月%d日 %H:%M:%S'
            }
        }


class EnvsNamesSerializer(serializers.ModelSerializer):

    class Meta:
        model = Envs
        fields = ('id', 'name')

有两个序列化器。

  • EnvsModelSerializer:正常显示所有数据
  • EnvsNamesSerializer:只显示id与name,为names action 准备的

四、视图

4.1 viewsets.ModelViewSet

views.py 视图

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

通过继承 viewsets.ModelViewSet视图类,实现以下接口

请求方式URI对应action实现功能
GET/envs/.list()查询env列表
POST/envs/.create()创建一条数据
GET/envs/{id}/.retrieve()检索一条env的详细数据
PUT/envs/{id}/update()更新一条数据中的全部字段
PATCH/envs/{id}/.partial_update()更新一条数据中的部分字段
DELETE/envs/{id}/.destroy()删除一条数据

4.2  自定义names

相关知识点:

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

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

names接口,需要我们自定义action 

GET/envs/names/.names() 自定义查询env列表

1、自定义  NamesMixin:

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)

 2、自定义names action

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

3、分页处理

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

4、过滤处理

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

源码:

 

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

这里的 def paginate_queryset(self, queryset): 

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

重写的

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

GenericAPIView源码:

 

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

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

相关文章

3D全景虚拟旅游在旅游行业中具备哪些应用价值?

在网络强国战略指引下,我们的网络基础设施建设步伐正在加快,与此同时,虚拟技术也在不断的更新迭代,虚拟旅游也逐渐崭露头角,将真实世界中的景点、文化以及历史场景等数字化,让游客身临其境地感受这些景点和…

【C语言】深入解密C语言组包与解包的用法、应用以及const的详细解说

目录 一、sprintf 用于组包 应用1:按照规定格式组包 应用2:将数值类型转换成字符串类型 二、sscanf 用于解包 应用1:%d提取数值‘0’~‘9’ 应用2:%s提取字符串(遇到\0 空格 回车结束提取) 三、sscanf高级应用 1、…

Unity3D+Hololens2+MRTK开发

最近项目要用Hololens2开发,公司新买了几套Hololens2设备,边学习边研究下吧。开始也是网上搜教程,但是问题还挺多的,大部分人的设置都不太对,有的是版本问题,走了好多弯路。现在就从零开始学习下Hololens2吧…

网络编程——RPC与HTTP基本介绍、历史追溯、主流应用场景、对比分析、为什么还需要使用RPC

一、HTTP与RPC基本介绍 HTTP协议(Hyper Text Transfer Protocol)超文本传输协议: 一个用于在网络上交换信息的标准协议,它定义了客户端(例如浏览器)和服务器之间的通信方式。如平时上网在浏览器上敲个网址url就能访问网页&#x…

Vue--》打造个性化医疗服务的医院预约系统(一)

今天开始使用 vue3 ts 搭建一个医院预约系统的前台页面,因为文章会将项目的每一个地方代码的书写都会讲解到,所以本项目会分成好几篇文章进行讲解,我会在最后一篇文章中会将项目代码开源到我的GithHub上,大家可以自行去进行下载运…

智慧农场丨2023年数字经济发展助力生态农场规划

智慧农场丨2023年数字经济发展助力生态农场规划 导读:生态农场是保护环境和发展农业的新模式,它遵循生态平衡规律,在持续利用的原则下开发利用农业自然资源,进行多层次、立体、循环利用的农业生产,使能量和物质流动在生…

【大数据之Hive】二十三、HQL语法优化之数据倾斜

1 数据倾斜概述 数据倾斜指参与计算的数据分布不均,即某个key或者某些key的数据量远超其他key,导致在shuffle阶段,大量相同key的数据被发往同一个Reduce,导致该Reduce所需的时间远超其他Reduce,成为整个任务的瓶颈。  …

System.InvalidOperationException:对象当前正在其他地方使用

System.InvalidOperationException:对象当前正在其他地方使用 出现此情况,一般是对象被多个线程同时使用了 解决办法就是同一时间只允许单线程访问目标对象;

面试上海某小厂Java岗,全程一小时问的全是细节

之前分享很多大厂的面经,这次分享一家上海某小厂的 Java 岗位面试,面试的时间也挺长的,接近 1 个小时,无算法,全程抓着项目mysqlredisjava这 4 个方向问。 问题记录 项目 介绍你的项目 这个项目是企业里面做的还是学…

Redis数据结构 — Listpack

目录 listpack 结构 listpack 节点结构 quicklist 虽然通过控制 quicklistNode 结构里的压缩列表的大小或者元素个数,来减少连锁更新带来的性能影响,但是并没有完全解决连锁更新的问题。 于是,Redis 在 5.0 新设计一个数据结构叫 listpack…

助力环保问题检测,基于YOLOv5全系列模型【n/s/m/l/x】开发构建不同量级裸土检测识别模型,对比实验分析检测性能

道路裸土扬尘问题是城市环境中常见的环境污染问题之一。在以往的一些项目中也有实际接触到过类似的检测识别需求,本文的主要目的是单纯地从实验分析的角度来对比裸土这一数据场景下不同量级参数模型的实际性能。 首先看下整体效果: 接下来简单看下数据集…

uniapp微信小程序使用axios(vue3+axios+ts版)

版本号 "vue": "^3.2.45", "axios": "^1.4.0", "axios-miniprogram-adapter": "^0.3.5", 安装axios及axios适配器,适配小程序 yarn add axios axios-miniprogram-adapter 使用axios 在utils创建utils/…

ES6新特性基础总结

目录 简介 node.js安装 babel转码器 let命令 const命令 解构对象 字符串扩展 新增方法: 数组扩展 扩展运算符 伪数组 对象扩展 属性的简介表示法 属性名表达式 对象的扩展运算符 函数扩展 箭头函数 使用注意 Set数据结构 基本用法 size属性 特有方法 P…

【数据结构常见七大排序(二)】—选择排序篇【直接选择排序】And【堆排序】

目录 前言 1.直接选择排序 1.1基本思想 1.2直接选择排序实现过程 1.3动图助解 1.4直接选择排序源码 2.堆排序 2.1堆排序的概念 2.2堆排序源码 前言 选择排序有两种常见的【直接选择排序】、【堆排序】 1.直接选择排序 1.1基本思想 每一次从待排序的数据元素中选出最…

Kafka 入门到起飞 - 核心概念(术语解释)

在kafka之旅,我们会大量讨论Kafka中的术语,那么就让我们先来了解一下这些核心概念 消息(Message): kafka的数据单元称为消息,相当于DB里的一行数据或一条记录 消息由字节数组组成 批次: 生产者组一批数据再向kafka推送…

短视频seo矩阵源码开发与实践分享

在短视频矩阵系统源码开发中,需要注意以下几个细节: 1. 确定系统的功能需求:在开发短视频矩阵系统源码时,必须先明确系统的功能需求,包括用户的基本操作、系统数据的生成和处理等。 2. 定义数据库结构:短…

提高开发效率!5个对开发者有用的Kotlin扩展函数

本文已同步发表于我的微信公众号,搜索 代码说 即可关注,欢迎与我沟通交流。 文章目录 runCatching代替try catchView的可见性dp、sp、px之间相互转换by lazy 替代findViewByIdToast、Log Kotlin 中扩展函数是一种允许在已有的类中添加新函数,…

Day52| 300.最长递增子序列 、 674. 最长连续递增序列 、718. 最长重复子数组

300.最长递增子序列 1.题目: 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 …

从编写metadata.yaml到测试processor文件成功

检查模型和客户端( Excel 原型图)字段是否对应 修改 applications\commands\metadata\cai_liao_ she_bei_metadata.yaml 文件 wen_jian_db_conf 下的 all 下的 content_field_name 选项,要根据 model 中写的文件路径找到对应的 model&#x…

论文阅读—2023.7.13:遥感图像语义分割空间全局上下文信息网络(主要为unet网络以及改unet)附加个人理解与代码解析

前期看的文章大部分都是深度学习原理含量多一点,一直在纠结怎么改模型,论文看的很吃力,看一篇忘一篇,总感觉摸不到方向。想到自己是遥感专业,所以还是回归遥感影像去谈深度学习,回归问题,再想着…