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()删除一条数据

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.hqwc.cn/news/22412.html

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

相关文章

Git详解

Git详解 认识GitGit的组成三个区域二大类,四种状态 Git add所做的操作Git commit所做的操作分支(branch)标签Tag Git checkout的作用创建分支切换分支切换提交快照撤销更改 Git安装Linux版本yum源方式安装编译方式安装 Windows Git命令使用比…

【电动车】基于多目标优化遗传算法NSGAII的峰谷分时电价引导下的电动汽车充电负荷优化研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

VisualStudio2022将printf信息打印到控制台

点击“解决方案管理器”,选中项目名称,点击鼠标右键---->属性---->生成事件---->生成后事件,在命令行的右侧输入框里填写如下内容: editbin /SUBSYSTEM:CONSOLE $(OUTDIR)\$(ProjectName).exe接下来在编译运行时&#x…

机器学习-sigmoid函数和relu函数-个人解读

机器学习-sigmoid函数和relu函数-个人解读 今天博主来解读一下sigmoid函数和relu函数,我觉得很多同学可能都知道这两个函数是什么,他们干什么的,他们有什么用,但是呢?我想这两个常用的激活函数内在的本质,…

【C++】模板(函数模板与类模板)讲解

本篇文章会对C中的模板进行讲解,其中会对函数模板和类模板进行讲解。希望本篇文章会对你有所帮助。 文章目录 一、函数模板 1、1 模板的引入 1、2 函数模板举例讲解 1、2、1 函数模板的概念 1、2、2 函数模板格式 1、2、3 函数模板实例化 1、2、4 模板参数的匹配原则…

如何将SAP数据抽取到Azure数据湖平台?

经过多年的发展,SNP Glue 在全球已成为值得信赖且广为人知的解决方案,支持客户将其 SAP 数据与现代化的平台集成。SNP Glue 打破了数据孤岛,向数据科学家开放了 SAP,支持基于企业 SAP 数据的多个新用例。 随着时间的推移&#xff…

详解 HTTPS、TLS、SSL、HTTP区别和关系

一、什么是HTTPS、TLS、SSL HTTPS,也称作HTTP over TLS。TLS的前身是SSL,TLS 1.0通常被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3。下图描述了在TCP/IP协议栈中TLS(各子协议)和HTTP的关系。 二、HTTP和HTTPS协议的区别 …

前端AES加密,后端解密,有效防止数据外泄

在工作中经常遇到密码明文传输这个问题,为了让密码安全些会让加密,现在有个比较方便的AES加密(前端密钥可能存在泄露风险,应该放到配置项中): 一、前端加密 1、首先引入前端需要用到的js:crypt…

【Git】Git 拉取的快速方法(含项目示例)

文章目录 一、问题的提出二、问题的尝试解决 一、问题的提出 在我们之前的拉取中,速度可能比较慢,例如,我们要拉取CLIP的项目。 (ldm) rootI1385efcc2300601b29:/hy-tmp/latent-diffusion# pip install githttps://github.com/openai/CLIP.…

接口测试辅助,Fiddler抓取安卓手机https请求(详细)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Fiddler 是一款免…

Qt + QR-Code-generator 生成二维码

0.前言 之前使用 libgrencode 生成二维码,LGPL 协议实在不方便,所以需要找一个 github 星星多的,代码简单最好 header-only,协议最好是 MIT 或者兼容协议而不是 GPL 或者 LPGL。 QR-Code-generator 正好符合这个要求&#xff0c…

Stable Diffusion 用2D图片制作3D动态壁纸

如果想让我们的2D图片动起来可以使用stable-diffusion-webui-depthmap-script插件在SD中进行加工让图片动起来。 这是一个可以从单个图像创建深度图,现在也可以生成3D立体图像对的插件,无论是并排还是浮雕。生成的结果可在3D或全息设备(如VR耳机或Looking Glass显示器)上查…