Django实现接口自动化平台(十二)自定义函数模块DebugTalks 序列化器及视图【持续更新中】

上一章:

Django实现接口自动化平台(十一)项目模块Projects序列化器及视图【持续更新中】_做测试的喵酱的博客-CSDN博客

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

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

一、DebugTalks 背景及相关接口

1.1 DebugTalks 应用

接口自动化,驱动使用的是httprunner==1.0版本。

httprunner 中,有一个debugtalks.py 文件,来编写自定义函数。

所以我们在创建项目时,会自动创建一个debugtalks.py 文件。一个项目对应一个debugtalks.py文件。

1.2 DebugTalks 接口

请求方式URI对应action实现功能
GET/debugtalks/.list()查询debugtalk列表
GET/debugtalks/{id}/.retrieve()检索一条debugtalk的详细数据
PUT/debugtalks/{id}/update()更新一条数据中的全部字段
PATCH/debugtalks/{id}/.partial_update()更新一条数据中的部分字段

二、DebugTalks 接口

debugtalks 就是一个python文件

2.1 内置函数文件的列表 .list()

 内置函数文件,是伴随的项目产生的。创建一个项目,自动创建一个debugtalk.py文件。删除一个项目,自动删除对应的debugtalk.py文件。

GET/debugtalks/.list()查询debugtalk列表

2.2  查看内置函数文件 .retrieve()

GET/debugtalks/{id}/.retrieve()检索一条debugtalk的详细数据

点击文件

 

 

2.3 更新内置函数文件 

PUT/debugtalks/{id}/update()更新一条数据中的全部字段

点击底部保存,更新文件。

2.4 创建与删除

创建与删除,是伴随项目 创建与删除的,所以内置文件的创建与删除,不是通过接口实现的。

三、模型类model

from django.db import modelsfrom utils.base_models import BaseModelclass DebugTalks(BaseModel):id = models.AutoField(verbose_name='id主键', primary_key=True, help_text='id主键')name = models.CharField('debugtalk文件名称', max_length=200, default='debugtalk.py', help_text='debugtalk文件名称')debugtalk = models.TextField(null=True, default='#debugtalk.py', help_text='debugtalk.py文件')project = models.OneToOneField('projects.Projects', on_delete=models.CASCADE,related_name='debugtalks', help_text='所属项目')class Meta:db_table = 'tb_debugtalks'verbose_name = 'debugtalk.py文件'verbose_name_plural = verbose_nameordering = ('id',)def __str__(self):return self.name

这段代码定义了一个名为 DebugTalks 的 Django 模型(Model)类,表示一个 debugtalk.py 文件。

该模型类继承自 BaseModel,并包含以下字段:

  • id:自增的主键字段,类型为 AutoField。
  • name:debugtalk 文件的名称,类型为 CharField。
  • debugtalk:debugtalk.py 文件的内容,类型为 TextField。
  • project:与该 debugtalk.py 文件关联的项目,采用一对一(OneToOne)关系,类型为外键(ForeignKey)字段,关联到 projects.Projects 模型。

此外,该模型类还定义了以下元数据(Meta):

  • db_table:指定数据库中表的名称为 tb_debugtalks。
  • verbose_name:该模型在后台管理页面中显示的名称为 "debugtalk.py 文件"。
  • verbose_name_plural:该模型在后台管理页面中显示的复数名称也为 "debugtalk.py 文件"。
  • ordering:指定按照 id 字段进行升序排序。

通过这个模型类,可以在数据库中创建一个名为 tb_debugtalks 的表,存储 debugtalk.py 文件的信息,并与项目进行关联。

 

四、序列化器类

from rest_framework import serializersfrom .models import DebugTalksclass DebugTalksModelSerializer(serializers.ModelSerializer):project = serializers.SlugRelatedField(slug_field='name', read_only=True)class Meta:model = DebugTalksexclude = ('create_datetime', 'update_datetime',)extra_kwargs = {'debugtalk': {'write_only': True}}class DebugTalksSerializer(serializers.ModelSerializer):class Meta:model = DebugTalksfields = ('id', 'debugtalk')

定义了两个序列化器类:

1、DebugTalksModelSerializer 类继承自 DRF 的 ModelSerializer。其中:

  • project 字段使用 SlugRelatedField,将关联到 DebugTalks 模型的 project 字段以 name 属性的形式进行展示,且只读(read_only=True)。
  • Meta 内部类中指定了模型为 DebugTalks,并且排除了 create_datetime 和 update_datetime 字段。
  • extra_kwargs 定义了对于 debugtalk 字段的额外属性,此处设置为只写(write_only=True)。

2、DebugTalksSerializer 类也继承自 DRF 的 ModelSerializer。其中:

  • Meta 内部类中指定了模型为 DebugTalks,并且只包含 id 和 debugtalk 两个字段。

这些序列化器可以用于将 DebugTalks 模型实例转换为 JSON 格式的数据,或者将 JSON 数据反序列化为 DebugTalks 模型实例。通过定义不同的字段和属性,可以对数据进行验证、创建和更新操作,以满足特定的需求。

五、视图

from rest_framework import viewsets
from rest_framework.decorators import action
from rest_framework import permissions
from .models import DebugTalks
from rest_framework import mixins
from . import serializersclass DebugTalksViewSet(mixins.ListModelMixin,mixins.RetrieveModelMixin,mixins.UpdateModelMixin,viewsets.GenericViewSet):queryset = DebugTalks.objects.all()serializer_class = serializers.DebugTalksModelSerializerpermission_classes = [permissions.IsAuthenticated]def get_serializer_class(self):return serializers.DebugTalksSerializer if self.action == 'retrieve' else self.serializer_class

首先导入了必要的库和模块:

  • from rest_framework import viewsets 导入了 DRF 的视图集。
  • from rest_framework.decorators import action 导入了 DRF 的装饰器,用于定义自定义动作。
  • from rest_framework import permissions 导入了 DRF 的权限类。
  • from .models import DebugTalks 导入了当前项目中的 DebugTalks 模型类。
  • from rest_framework import mixins 导入了 DRF 的 Mixin 类。
  • from . import serializers 导入了当前项目中的序列化器。

然后定义了一个 DebugTalksViewSet 类,该类继承了 DRF 提供的各种 Mixin 类和 GenericViewSet 类。其中:

  • mixins.ListModelMixin 提供了列表展示功能。
  • mixins.RetrieveModelMixin 提供了详情展示功能。
  • mixins.UpdateModelMixin 提供了更新功能。
  • viewsets.GenericViewSet 是一个通用的视图集类。

在类中定义了以下属性和方法:

  • queryset 属性指定了视图集的查询集,即需要进行操作的数据集合,这里是 DebugTalks.objects.all(),表示获取 DebugTalks 模型的所有实例。
  • serializer_class 指定了默认使用的序列化器类为 serializers.DebugTalksModelSerializer。
  • permission_classes 指定了默认的权限类为 permissions.IsAuthenticated,表示只有认证的用户才能访问该视图集。

接下来定义了一个自定义方法 get_serializer_class(),用于根据不同的动作决定使用哪个序列化器类。如果动作是 retrieve(详情展示),则使用 serializers.DebugTalksSerializer,否则使用默认的序列化器类。

通过这些配置和定义,DebugTalksViewSet 类可以提供列表展示、详情展示和更新功能,并根据不同的动作选择合适的序列化器类进行数据的序列化和反序列化操作。同时,该视图集还具备权限控制,只有认证的用户才能访问。

 

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

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

相关文章

【Java面试丨并发编程】线程中并发安全

一、Synchronized关键字的底层原理 1. Synchronized的作用 Synchronized【对象锁】采用互斥的方式让同一时刻至多只有一个线程能持有【对象锁】,其他线程再想获取这个【对象锁】时就会阻塞住 2. Monitor Synchronized【对象锁】底层是由Monitor实现,…

计算机网络——VLan介绍

学习视频: 网工必会,十分钟搞明白,最常用的VLAN技术_哔哩哔哩_bilibili 技术总结:VLAN,网络中最常用的技术,没有之一_哔哩哔哩_bilibili 全国也没几个比我讲得好的:VLAN虚拟局域网 本来补充了…

巧妙使用 CSS 渐变来实现波浪动画

目录 一、波浪的原理 二、曲面的绘制 三、波浪动画 四、文字波浪动画 五、总结一下 参考资料 之前看到coco[1]的这样一篇文章:纯 CSS 实现波浪效果![2],非常巧妙,通过改变border-radius和不断旋转实现的波浪效果&#xff0c…

【unity细节】分不清楚__世界坐标,自身坐标,Vector3,transform和translate?

👨‍💻个人主页:元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 收录于专栏:unity细节和bug ⭐世界坐标系transform和自身坐标Trasform.local和Vector3⭐ 文章目录 ⭐世界坐标…

excel常用操作备忘

excel操作: 1、快速填充多列公式:选中多列后,按ctrlD填 充。 2、快速删除空行:全选行,按ctrlG,空值项前边打上钩,点确定,针对选中的空行,鼠标右击,点删除&…

APACHE KAFKA本机Hello World教程

目标 最近想要简单了解一下Apache Kafka,故需要在本机简单打个Kafka弄一弄Hello World级别的步骤。 高手Kafka大佬们,请忽略这里的内容。 步骤 Apacha Kafka要求按照Javak8以上版本的环境。从官网下载kafka并解压。 启动 # 生产kafka集群随机ID KA…

【机密计算标准】GB/T 41388-2022 可信执行环境基础安全规范

1 范围 本文件确立了可信执行环境系统整体技术架构,描述了可信执行环境基础要求、可信虚拟化系统、可信操作系统、可信应用与服务管理、跨平台应用中间件等主要内容及其测试评价方法。 2 规范性引用文件 下列文件中的内容通过文中的规范性引用面构成本文件必不…

❤️创意网页:如何创建一个漂亮的3D正六边形

✨博主:命运之光 🌸专栏:Python星辰秘典 🐳专栏:web开发(简单好用又好看) ❤️专栏:Java经典程序设计 ☀️博主的其他文章:点击进入博主的主页 前言:欢迎踏入…

Python多线程编程Queue队列使用方法

一、多线程编程Queue队列 在多线程编程中,由于多个线程并发执行,可能会导致线程之间出现协调问题,为了保证线程间的同步和协调,Python提供了Queue模块,支持多线程间的数据交换和同步。Queue是一种线程安全的数据结构&…

MYSQL常见面试题汇总

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员,2024届电子信息研究生 目录 1、三大范式 2、DML 语句和 DDL 语句区别 3、主键和外键的区别 4、drop、delete、truncate 区别 5、基础架构 6、MyISAM 和 InnoDB 有什么区别? 7、推荐自增id作…

用 PerfView 洞察.NET程序非托管句柄泄露

一:背景 1. 讲故事 前几天写了一篇 如何洞察 .NET程序 非托管句柄泄露 的文章,文中使用 WinDbg 的 !htrace 命令实现了句柄泄露的洞察,在文末我也说了,WinDbg 是以侵入式的方式解决了这个问题,在生产环境中大多数情况…

深度学习(28)——YOLO系列(7)

深度学习(28)——YOLO系列(7) 咱就是说,需要源码请造访:Jane的GitHub:在这里 上午没写完的,下午继续,是一个小尾巴。其实上午把训练的关键部分和数据的关键部分都写完了…