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

相关文章:

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 modelsfrom utils.base_models import BaseModelclass 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_nameordering = ('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 serializersfrom .models import Envsclass EnvsModelSerializer(serializers.ModelSerializer):class Meta:model = Envsexclude = ('update_datetime',)extra_kwargs = {'create_datetime': {'read_only': True,'format': '%Y年%m月%d日 %H:%M:%S'}}class EnvsNamesSerializer(serializers.ModelSerializer):class Meta:model = Envsfields = ('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 NamesMixinclass EnvsViewSet(NamesMixin, viewsets.ModelViewSet):queryset = Envs.objects.all()serializer_class = serializers.EnvsModelSerializerpermission_classes = [permissions.IsAuthenticated]def get_serializer_class(self):if self.action == "names":return serializers.EnvsNamesSerializerelse: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()删除一条数据

重写了get_serializer_class 方法

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

get_serializer_class 源码:

 

重写后,当action为names时,返回序列化器为serializers.EnvsNamesSerializer

 

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 responsedef paginate_queryset(self, queryset):"""names action禁用分页功能:param queryset::return:"""if self.action == "names":returnelse:return super().paginate_queryset(queryset)def filter_queryset(self, queryset):"""names action禁用过滤功能:param queryset::return:"""if self.action == "names":return self.querysetelse: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.querysetelse:return super().filter_queryset(queryset)

4、过滤处理

    def filter_queryset(self, queryset):"""names action禁用过滤功能:param queryset::return:"""if self.action == "names":return self.querysetelse: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.mzph.cn/news/2906.shtml

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

相关文章

mac 下 geoserver 安装

一、去官网下载geoserver https://geoserver.org/ 选择一个版本,然后点进去 二、需要配置java环境和设置geoserver 环境变量 1)、java 环境安装 Java Downloads | Oracle 中国 2)、环境变量设置 1.打开终端:command 空格键 2…

Python自动获取字母站视频

如果有疑问的话可以在我的谈论群:706128290 来找我 目录 前言 二、编写代码 1.引入库 2.编写主类 3. 自动获取cookies值和生成headers 4.获取命令行参数 运行效果 前言 browser_cookie3 第三方模块 browser_cookie3是browser_cookie模块的分支,…

jupyter notebook更换虚拟环境(内核)

jupyter notebook更换虚拟环境(内核) 创建一个新的虚拟环境 # stk_env 虚拟环境的名字,任取。 conda create -n stkenv python3.9激活虚拟环境 conda activate stkenv安装ipykernel # 为该虚拟环境,安装内核。 conda install -c a…

基于C语言设计的足球信息查询系统

完整资料进入【数字空间】查看——baidu搜索"writebug" 需求分析与概要设计 2.1 项目说明 我们小组的选题主要是面向足球爱好者,在普通社交软件的基础之上,围绕足球的主题展开设计,以便于他们能够更好的交流相关的话题&#xff…

LangChain(2)提示工程 Prompt Engineering

提示一般包含如下部分: Instructions:整体结构,模型的人设 Instructions tell the model what to do, how to use external information if provided, what to do with the query, and how to construct the output. External information&a…

linux之Ubuntu系列(六)用户管理 终端命令 which 查看执行命令所在的位置

提示 /etc/passwd 是用于保存用户信息的文件 可以用cat 命令查看 cat /etc/passwd/usr/bin/passwd 是用于修改用户密码的 程序 ,是程序 程序 , which 命令 可以查看执行命令所在的位置 # 输出 /bin/ls which ls # 输出 /usr/sbin/useradd which useradd…

话费电费中控搭建,api接口h5,公众号,小程序app

话费充值接口文档 接口版本:1.0 ―、引言 文档概述 本文档提供话费充值接口规范说明,提供一整套的完整的接入示例(http 接口)供商户参 考,可以帮助商户开发人员快速完成接口开发与联调,实现与话费充值系统的交易互联。 公司官网…

【算法第六天7.19】反转字符串,反转字符串||,剑指 Offer 05. 替换空格,反转字符串的单词, 左旋转字符串

链接:力扣344-反转字符串 链接:力扣541-反转字符串|| 链接:剑指 Offer 05. 替换空格 链接:力扣151- 反转字符串的单词 链接:剑指 Offer 58 - II. 左旋转字符串 链接:力扣344-反转字符串 思路&#xff…

git clone 或者是vscode clone 时遇到the remote end hung up unexpectedly

fatal: the remote end hung up unexpectedly fatal: early EOF fatal: index-pack failed使用git clone总是报错 查看原因有三种可能:要么是缓存不够,要么是网络不行,要么墙的原因。 如果是网络不行,可以配置git的最低速度和最…

C#基础--线程之Task

C#基础–线程之Task Task 是.NetFramework3.0出现的,Task里面的线程是来自于线程池 一、Task 1. 开启一个线程 Task 构造函数 传入一个无参数的 Action 委托作为参数 Task task = new Task(() =>{this.DoSomethingLong("btntask_Click1");}); task.Start();Run…

局部响应归一化LRN(Local Response Normalization)

LRN(Local Response Normalization)是一种局部响应归一化的技术,在深度学习中常用于增强模型的泛化能力和对光照、对比度等变化的鲁棒性。LRN主要用于激活函数后的归一化过程,它对局部神经元响应进行归一化,使得响应较…

C/C++ 使用 define 实现运行时函数是在哪个文件哪个函数被调用

1. 原始代码 // demo2.h #include <iostream>void testFunc(int num) {std::cout << num << std::endl; }//main.cc #include "demo2.h"void func1() { }void func2() {testFunc(24); }int main() {func1();func2();return 0; }我现在需要知道 te…

re学习(19)[ACTF新生赛2020]easyre1(UPX脱壳)

文章链接&#xff1a;BUUCTF在线评测 参考视频&#xff1a;B站 【新手教程三】小Z带你学习什么是ESP定律和什么是堆栈平衡 &#xff1f; - 『脱壳破解区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn 题解&#xff1a; 工具脱壳 key"*F\"N,\"…

MYSQL数据库-数据库的学习

MYSQL数据库-数据库的学习 MYSQL数据库一、数据库的基本概念二、常见的数据库三、MySQL数据库四、SQL操作五、SQL高级操作六、SQL函数&#xff08;SQL 拥有很多可用于计数和计算的内建函数) MYSQL数据库 一、数据库的基本概念 1、数据库的英文单词:DataBase 简称 : DB 2、什么…

C#基础--进程和线程的认识

C#基础–进程和线程的认识 一、基础概念 1. 什么是进程? 进程并不是物理的东西,是虚拟出来的,是一种概念。当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。而一个进程又是由多个线程所组成的。是一种计算机概念,是程序在运…

【矩阵的创建与基本运算】——matlab基础

目录索引 创建矩阵&#xff1a;zeros()&#xff1a;ones&#xff1a;eye()&#xff1a;magic()&#xff1a;引号创建序列矩阵&#xff1a;linspace()&#xff1a; 加减与数乘&#xff1a;其他运算&#xff1a;指数运算&#xff1a;*exp()&#xff1a;* 点式运算&#xff1a; 创…

Fiddler抓包app(方便后端定位app调用的是那个接口?参数为何?)

一、抓http请求的包 1、设置Fiddler允许远程连接 选择Tools->Options 选择Connections选项卡&#xff0c;选中允许远程连接&#xff0c;如图所示 2、手机与电脑连接相同的wlan网络 3、手机wlan设置手动代理&#xff0c; 1&#xff09;手动代理的主机名设为电脑ip&…

centos 7升级gcc到10.5.0

目录 1、安装gcc 1.1、查看是否含有gcc及gcc版本 1.2、快速安装gcc 2、升级gcc 2.1、下载gcc源码包并解压缩 2.2、下载编译依赖项 2.3、新建gcc-bulid目录&#xff08;与gcc-10.5.0同级&#xff09;并进入该目录中 2.4、生成Makefile文件 2.5、开始编译 2.6、安装 2…

北京小厂一面30问

小厂一面30问 Redis除了存储数据外还能实现什么功能&#xff1f; 除了存储数据外&#xff0c;Redis还可以实现数据的缓存、分布式锁、消息队列、计数器等功能。Redis还支持事务、Lua脚本、发布/订阅等高级功能。 HashMap的底层原理是什么&#xff1f; HashMap是通过数组和链表…

【统计函数3】——excel常见函数

相关数据资料来源于网易 函数一览&#xff1a; rank、rand、randbetween、floor、int rank函数: 求某单元格在某区域内的排名 RANK(数值,引用区域,降序0/升序1)范围多指定&#xff1a; 分开的范围之间可用逗号隔开&#xff0c;最后再用一个小括号括起来。F4可以快速锁定行和列。…