测试平台——项目模块模型类设计

这里写目录标题

  • 一、项目应用
    • 1、项目包含接口:
    • 2、创建子应用
    • 3、项目模块设计
      • a、模型类设计
      • b、序列化器类设计
      • c、视图类设计
    • 4、接口模块设计
      • a、模型类设计
      • b、序列化器类设计
      • c、视图类设计
    • 5、环境模块设计
    • 6、DRF中的通用过滤
      • 6.1、设置过滤器后端

一、项目应用

1、项目包含接口:

  • 项目管理接口
  • 接口管理接口
  • 环境管理接口

2、创建子应用

python manage.py startapp projects

3、项目模块设计

a、模型类设计

from django.db import models# Create your models here.
class Project(models.Model):"""项目表"""name = models.CharField(max_length=50, help_text='项目名称', verbose_name='项目名')leader = models.CharField(max_length=50, help_text='负责人', verbose_name='负责人', default='')create_time = models.DateTimeField(verbose_name='创建时间', help_text='创建时间', auto_now_add=True)class Meta:db_table = 'tb_project'verbose_name = '项目表'verbose_name_plural = verbose_namedef _str__(self):return self.name

b、序列化器类设计

from rest_framework import serializers
from rest_framework.serializers import ModelSerializerclass ProjectSerializer(ModelSerializer):class Meta:model = Projectfields = '__all__'

c、视图类设计

class ProjectViewSet(ModelViewSet):queryset = Project.objects.all()serializer_class = ProjectSerializer

4、接口模块设计

a、模型类设计

class Interface(models.Model):"""接口表"""CHOICES = [('1', '项目接口'),('2', '外部接口')]project = models.ForeignKey('Project',on_delete=models.CASCADE,help_text='项目id',verbose_name='项目id',related_name='interfaces')name = models.CharField(max_length=50, help_text='接口名称', verbose_name='接口名称')url = models.CharField(max_length=200, help_text='接口路径', verbose_name='接口路径')method = models.CharField(max_length=50, help_text='请求方法', verbose_name='请求方法')type = models.CharField(verbose_name='接口类型',help_text='接口类型',max_length=40,choices=CHOICES,default='1')# 扩展,接口的说明,接口字段的参数def __str__(self):return self.urlclass Meta:db_table = 'tb_interface'verbose_name = '接口表'verbose_name_plural = verbose_name

b、序列化器类设计

class NestTestStepSerializer(ModelSerializer):"""嵌套测试步骤序列化器"""class Meta:model = TestStepfields = ['id', 'title']class InterfaceSerializer(ModelSerializer):steps = NestTestStepSerializer(many=True, read_only=True, source='teststep_set')class Meta:model = Interfacefields = '__all__'def validate(self, attrs):url = attrs.get('url')type_ = attrs.get('type')if type_ == '2':if not url.startswith('http'):raise serializers.ValidationError('外部接口的url需要完整的url,必须以http或者https开头')return attrs

获取接口的列表信息时:还需要将接口的下用例信息获取出来

c、视图类设计

5、环境模块设计

class TestEnv(models.Model):"""测试坏境表"""name = models.CharField(max_length=150, help_text='环境名称', verbose_name='环境名称')project = models.ForeignKey(Project,on_delete=models.CASCADE,help_text='项目id',verbose_name='项目id')global_variable = models.JSONField(help_text='全局变量',verbose_name='全局变量',default=dict,null=True)debug_global_variable = models.JSONField(help_text='debug模式全局变量',verbose_name="debug模式全局变量",default=dict,null=True)db = models.JSONField(help_text='数据库配置',verbose_name='数据库配置',default=list,null=True,blank=True)host = models.CharField(help_text='base_url地址',verbose_name='base_url地址',max_length=100,null=True,blank=True)headers = models.JSONField(help_text='请求头',verbose_name='请求头',default=dict,null=True, blank=True)global_func = models.TextField(help_text='全局工具函数',verbose_name='全局工具函数',default=open('./utils/global_func.py', 'r',encoding='utf-8').read(),null=True,blank=True)def __str__(self):return self.nameclass Meta:db_table = 'tb_testenv'verbose_name = '接口表'verbose_name_plural = verbose_name

6、DRF中的通用过滤

除了能够覆盖默认查询集之外,REST 框架还包括对通用过滤后端的支持,允许您轻松构建复杂的搜索和过滤器。

6.1、设置过滤器后端

可以使用设置全局设置默认过滤器后端DEFAULT_FILTER_BACKENDS。例如。

a、要使用DjangoFilterBackend,请先安装django-filter

pip install django-filter

注意djoango-filter仅支持:
● Python: 3.6,3.7,3.8
● Django: 2.2, 3.1,3.2
● DRF: 3.10+

b、注册

INSTALLED_APPS = [...'django_filters',...
]

c、配置

REST_FRAMEWORK = {......# 过滤'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend'],
}

d、使用
在后端类视图或者视图集中添加filterset_fields属性即可实现指定字段过滤,例如改写环境管理视图集
如下:

class EnvViewSet(ModelViewSet):queryset = TestEnv.objects.all()serializer_class = EnvSerializerfilterset_fields = ['name','project']

不需要在复写get_queryset方法手动过滤,就可以通过url/test_envs/?project=1访问过滤数据了。
注意:当使用外键字段过滤时,如果级联模式是删除,则使用不存在的数据过滤会返回400响应。例如上面的
视图如果使用不存在的项目id过滤返回结果如下:

http://127.0.0.1:8000/test_envs?project=2

在这里插入图片描述

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

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

相关文章

SpringBoot统一功能处理(拦截器)

1.用户登录权限校验 1.1自定义拦截器 写一个类去实现HandlerInterceptor接口表示当前类是一个拦截器,再重写HandlerInterceptor接口中的方法,preHandle为在方法执行前拦截,postHandle为方法执行中拦截,afterCompletion为方法执行中拦截.需要在什么时候拦截就重写什么方法 Co…

百度智能云“千帆大模型平台”最新升级:接入Llama 2等33个模型!

今年3月,百度智能云推出“千帆大模型平台”。作为全球首个一站式的企业级大模型平台,千帆不但提供包括文心一言在内的大模型服务及第三方大模型服务,还提供大模型开发和应用的整套工具链,能够帮助企业解决大模型开发和应用过程中的…

人工智能可解释性分析导论(初稿)

目录 思维导图 1.黑箱所带来的问题 2.从应用面论述为什么要进行可解释性分析 2.1可解释性分析指什么 2.2可解释性分析的必要性 2.3可解释性分析应用实例 2.4 可解释性分析的脑回路(以可视化为例如何) 3.如何研究可解释性分析 3.1使用好解释的模型 3…

ClickHouse SQL与引擎--基本使用(一)

1.查看所有的数据库 show databases; 2.创建库 CREATE DATABASE zabbix ENGINE Ordinary; ATTACH DATABASE ck_test ENGINE Ordinary;3.创建本地表 CREATE TABLE IF NOT EXISTS test01(id UInt64,name String,time UInt64,age UInt8,flag UInt8 ) ENGINE MergeTree PARTI…

mysql高级(尚硅谷-夏磊)

目录 内容介绍 Linux下MySQL的安装与使用 Mysql逻辑架构 Mysql存储引擎 Sql预热 索引简介 内容介绍 1、Linux下MySQL的安装与使用 2、逻辑架构 3、sql预热 Linux下MySQL的安装与使用 1、docker安装docker run -d \-p 3309:3306 \-v /atguigu/mysql/mysql8/conf:/etc/my…

VGG卷积神经网络-笔记

VGG卷积神经网络-笔记 VGG是当前最流行的CNN模型之一, 2014年由Simonyan和Zisserman提出, 其命名来源于论文作者所在的实验室Visual Geometry Group。 测试结果为: 通过运行结果可以发现,在眼疾筛查数据集iChallenge-PM上使用VGG…

[LeetCode]链表相关题目(c语言实现)

文章目录 LeetCode 203. 移除链表元素LeetCode 237. 删除链表中的节点LeetCode 206. 反转链表ⅠLeetCode 92. 反转链表 II思路 1思路 2 LeetCode 876. 链表的中间结点剑指 Offer 22. 链表中倒数第k个节点LeetCode 21. 合并两个有序链表LeetCode 86. 分隔链表LeetCode 234. 回文…

flask-----蓝图

1.引入蓝图 flask都写在一个文件中,项目这样肯定不行,会导致循环导入的问题,分目录,分包,使用蓝图划分目录。 2.使用蓝图 步骤如下: -1 实例化得到一个蓝图对象-order_blueBlueprint(order,__name__,tem…

Pytorch入门学习——快速搭建神经网络、优化器、梯度计算

我的代码可以在我的Github找到 GIthub地址 https://github.com/QinghongShao-sqh/Pytorch_Study 因为最近有同学问我如何Nerf入门,这里就简单给出一些我的建议: (1)基本的pytorch,机器学习,深度学习知识&a…

C语言----字节对齐

一:字节对齐的概念 针对字节对齐,百度百科的解释如下: 字节对齐是字节按照一定规则在空间上排列,字节(Byte)是计算机信息技术用于计量存储容量和传输容量的一种计量单位,一个字节等于8位二进制数,在UTF-8编…

ChatGPT在工作中的七种用途

1. 用 ChatGPT 替代谷歌搜索引擎 工作时,你一天会访问几次搜索引擎?有了 ChatGPT,使用搜索引擎的频率可能大大下降。 据报道,谷歌这样的搜索引擎巨头,实际上很担心用户最终会把自己的搜索工具换成 ChatGPT。该公司针对…

首批获得金融级行业云平台认证,天翼云深耕行业云

云计算下半场看什么? 无疑是金融、政务、制造等传统政企用户的上云与用云。随着数字经济发展和产业数字化的提速,上云已是政企用户推动其数字化转型不断深入的重要抓手,成为不可阻挡的趋势。 与互联网用户相比,政企用户上云极为…

数据库的约束 详解

一、约束的概述 1.概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。 2.目的:保证数据库中数据的正确、有效性和完整性。 3.分类: 约束描述关键字非空约束限制该字段的数据不能为nullNOT NULL唯一约束保证该字段的所有数据都是唯一、不…

Mybatis实现JsonObject对象与JSON之间交互

项目中使用PostGresql数据库进行数据存储,表中某字段为Json类型,用于存储Json格式数据。PG数据库能够直接存储Json算是一大特色,很多特定情境下使用直接存储Json字段数据能够大量节省开发时间,提高后台数据查询和转换效率。 1、基…

微信小程序如何引入Iconfont

在小程序中引入 Iconfont 可以通过以下步骤进行操作: 打开 Iconfont 网站(https://www.iconfont.cn/)并登录账号,创建一个项目并添加所需的图标到项目中。 在项目中选中需要使用的图标,点击右上角的 “下载代码” 按钮…

Spring Boot 中自动装配机制的原理

问题描述 自动装配,简单来说就是自动把第三方组件的 Bean 装载到 Spring IOC 器里面,不需 要开发人员再去写 Bean 的装配配置。 在 Spring Boot 应用里面,只需要在启动类加上SpringBootApplication 注解就可以实现自动装配。 SpringBootAppli…

【机器学习】对 MLOps 的友好的介绍(MLOps1)

一、说明 我对 MLOps 感兴趣已经有一段时间了。我第一次从机器学习工程师那里了解到它,由于我当时还是一名博士生,我并不知道它的存在。然而,我的好奇心被激起了,我开始了解它。回想起来,我很后悔没有早点了解它&#…

云原生应用里的服务发现

服务定义: 服务定义是声明给定服务如何被消费者/客户端使用的方式。在建立服务之间的同步通信通道之前,它会与消费者共享。 同步通信中的服务定义: 微服务可以将其服务定义发布到服务注册表(或由微服务所有者手动发布)…

视频添加字幕

1、依靠ffmpeg 命令 package zimu;import java.io.IOException;public class TestSrt {public static void main(String[] args) {String videoFile "/test/test1.mp4";String subtitleFile "/test/test1.SRT";String outputFile "/test/testout13…

Redis入门

0目录 1.Redis入门 2.Redis定义;特点及数据类型 3.Value为List类型 4.Value值类型为Set 5.Value值类型为Hash 6.Value值类型为Zset 1.Redis入门 Redis入门 解压包,运行redis-server.exe 安装可视化软件测试链接 命名测试链接 点击确定 2.Redis…