Django实现接口自动化平台(八)测试报告reports序列化器及视图【持续更新中】

news/2025/1/9 12:18:12/

上一章:

Django实现接口自动化平台(七)数据库设计_做测试的喵酱的博客-CSDN博客

下一章:

官方文档:

Serializers - Django REST framework

一、测试报告reports序列化器及视图

1.1 序列化器

apps/reports/serializers.py

# -*- coding:utf-8 -*-
# @Author: 喵酱
# @time: 2023 - 06 -12
# @File: serializers.py
# desc:
from rest_framework import serializersfrom .models import Reportsclass ReportsModelSerilizer(serializers.ModelSerializer):class Meta:model = Reportsexclude = ('update_time',)read_only_fields = ('name', 'count', 'result', 'success')extra_kwargs = {"create_time": {"read_only": True,"format": "%Y年%m月%d日 %H:%M:%S"},"name": {"read_only": True,},"html": {"write_only": True},"summary": {"write_only": True}}def to_representation(self, instance):data = super().to_representation(instance)data['result'] = '成功' if data.get('result') else '失败'return data

1.1.1 代码解释:

1、 exclude:

You can set the exclude attribute to a list of fields to be excluded from the serializer.

For example:

class AccountSerializer(serializers.ModelSerializer):class Meta:model = Accountexclude = ['users']

2、read_only_fields =()设置字段属性为只读 

3、extra_kwargs = {} ,设置字段的属性。

4、自定义字段 to_representation

官方文档:Serializer fields - Django REST framework

Custom fields

If you want to create a custom field, you'll need to subclass Field and then override either one or both of the .to_representation() and .to_internal_value() methods. These two methods are used to convert between the initial datatype, and a primitive, serializable datatype. Primitive datatypes will typically be any of a number, string, boolean, date/time/datetime or None. They may also be any list or dictionary like object that only contains other primitive objects. Other types might be supported, depending on the renderer that you are using.

The .to_representation() method is called to convert the initial datatype into a primitive, serializable datatype.

The .to_internal_value() method is called to restore a primitive datatype into its internal python representation. This method should raise a serializers.ValidationError if the data is invalid.

自定义字段
如果您想创建一个自定义字段,您需要子类化field,然后重写.to_representation()和.to_internal_value()方法中的一个或两个。这两个方法用于在初始数据类型和原始的、可序列化的数据类型之间进行转换。基本数据类型通常是数字、字符串、布尔值、日期/时间/datetime或None中的任何一种。它们也可以是任何类似列表或字典的对象,只包含其他基本对象。可能支持其他类型,这取决于您正在使用的呈现器。

调用.to_representation()方法将初始数据类型转换为可序列化的原始数据类型。

调用.to_internal_value()方法将原始数据类型恢复为其内部python表示。此方法应引发序列化器。如果数据无效,则返回ValidationError。

Examples

A Basic Custom Field

Let's look at an example of serializing a class that represents an RGB color value:

class Color:"""A color represented in the RGB colorspace."""def __init__(self, red, green, blue):assert(red >= 0 and green >= 0 and blue >= 0)assert(red < 256 and green < 256 and blue < 256)self.red, self.green, self.blue = red, green, blueclass ColorField(serializers.Field):"""Color objects are serialized into 'rgb(#, #, #)' notation."""def to_representation(self, value):return "rgb(%d, %d, %d)" % (value.red, value.green, value.blue)def to_internal_value(self, data):data = data.strip('rgb(').rstrip(')')red, green, blue = [int(col) for col in data.split(',')]return Color(red, green, blue)

1.2 视图

apps/reports/views.py

import logging
import jsonfrom rest_framework import viewsets
from rest_framework.decorators import action
from rest_framework import permissions
from rest_framework import mixins
from django.http.response import StreamingHttpResponse
from rest_framework.response import Response
from rest_framework import statusfrom . import serializers
from .models import Reports
from utils.pagination import PageNumberPaginationlogger = logging.getLogger('miaostudydjango')class ReportViewSet(mixins.ListModelMixin,mixins.RetrieveModelMixin,mixins.DestroyModelMixin,viewsets.GenericViewSet):queryset = Reports.objects.all()serializer_class = serializers.ReportsModelSerilizerpermission_classes = [permissions.IsAuthenticated]def retrieve(self, request, *args, **kwargs):instance = self.get_object()try:summary = json.loads(instance.summary, encoding='utf-8')return Response({'id': instance.id,'summary': summary}, status=status.HTTP_200_OK)except Exception:return Response({'err': '测试报告summary格式有误'}, status=status.HTTP_400_BAD_REQUEST)@action(detail=True)def download(self, request, *args, **kwargs):# 1、获取html源码instance = self.get_object()# 2、将html源码转化为生成器对象# byte_data = instance.html.encode('utf-8')byte_data = instance.html# 3、StreamingHttpResponse对象response = StreamingHttpResponse(iter(byte_data))# StreamingHttpResponse、HttpResponse、Response,这些['key'] = 'value',可以添加响应头数据response['Content-Type'] = 'application/octet-stream'response['Content-Disposition'] = f"attachment; filename*=UTF-8 '' {instance.name + '.html'}"return response

1.2.1 代码解释

1.3 路由

apps/reports/urls.py

from rest_framework import routersfrom . import viewsrouter = routers.SimpleRouter()
router.register(r'reports', views.ReportViewSet)urlpatterns = [
]urlpatterns += router.urls

miaostudydjango/urls.py

urlpatterns = [path('', include('reports.urls')),]


http://www.ppmy.cn/news/348625.html

相关文章

一文讲透彻!RobotFramwork测试框架教程(全能)

Robot Framwork在业界早已名声大振&#xff01;有很多刚学自动化测试的伙伴问我&#xff1a;有没有不需要编程就可以玩自动化的方法&#xff1f; 有吗&#xff1f;有的&#xff01;——Robot Framwork 我们今天就一篇文章&#xff0c;把它讲得明明白白&#xff01; 一、Robo…

huggingface lfs下载小技巧

先clone下来&#xff0c;然后再git lfs pull 明显要快得多。

面板安全能力持续增强,新增日志审计功能,1Panel开源面板v1.3.0发布

2023年6月12日&#xff0c;现代化、开源的Linux服务器运维管理面板1Panel正式发布v1.3.0版本。 在这一版本中&#xff0c;1Panel进一步增强了安全方面的能力&#xff0c;包括新增SSH配置管理、域名绑定和IP授权支持&#xff0c;以及启用网站防盗链功能。此外&#xff0c;该版本…

PHPMVC普通架构和大型网站架构

整理电脑磁盘发现N年前的资料&#xff0c;发布下留个记忆&#xff01; 当前小型网站架构MVC基本上足够使用了&#xff0c;但是对于习惯性MVC的编码人员来说&#xff0c;学习下大型编码架构经验也是必须掌握的技能&#xff01; 以下是笔记 PHP MVC架构是一种常用的Web应用程序…

数据结构 一绪论

第一章&#xff1a;绪论 1.1数据结构的基本概念 1.数据&#xff1a;数据是信息的载体&#xff0c;是描述客观事物属性的数、字符以及所有能输入到计算机中并被程序识别 和处理的符号的集合。 2.数据元素&#xff1a;数据元素是数据的基本单位&#xff0c;通常作为一个整体进行…

如何进行App性能测试?iTest工具助力你轻松实现!

目录 引言 功能简介 基本功能使用说明 其它功能 iTest数据上传功能 iTest使用注意事项 引言 如何使用iTest工具进行App性能测试。 在如今这个高度竞争的移动应用市场中&#xff0c;用户对于应用程序的体验需求越来越高&#xff0c;而良好的性能表现则是实现这一目标的关…

QTableView行列大小的调整模式

QHeaderView::Interactive&#xff1a;允许用户通过拖拽表头来改变列或行的大小&#xff0c;也可以通过程序调用 resizeSection() 函数来改变大小。默认情况下&#xff0c;列或行的大小为 defaultSectionSize。该模式支持级联大小调整&#xff08;cascadingSectionResizes&…

安全监测传感器在大坝应用中的基本要求

水库是兴水利、除水害的基础设施。然而&#xff0c;随着运行使用年限的增加&#xff0c;许多水库的工程设施都出现了老化和损坏的现象&#xff0c;这严重影响了水库的安全运行和经济效益的发挥&#xff0c;同时也对水库下游的人民群众的生命和财产产生威胁。为了解决水库面临的…