上一章:
Django实现接口自动化平台(十一)项目模块Projects序列化器及视图【持续更新中】_做测试的喵酱的博客-CSDN博客
本章是项目的一个分解,查看本章内容时,要结合整体项目代码来看:
python django vue httprunner 实现接口自动化平台(最终版)_python+vue自动化测试平台_做测试的喵酱的博客-CSDN博客
接口自动化,驱动使用的是httprunner==1.0版本。
httprunner 中,有一个debugtalks.py 文件,来编写自定义函数。
所以我们在创建项目时,会自动创建一个debugtalks.py 文件。一个项目对应一个debugtalks.py文件。
请求方式 | URI | 对应action | 实现功能 |
GET | /debugtalks/ | .list() | 查询debugtalk列表 |
GET | /debugtalks/{id}/ | .retrieve() | 检索一条debugtalk的详细数据 |
PUT | /debugtalks/{id}/ | update() | 更新一条数据中的全部字段 |
PATCH | /debugtalks/{id}/ | .partial_update() | 更新一条数据中的部分字段 |
debugtalks 就是一个python文件
内置函数文件,是伴随的项目产生的。创建一个项目,自动创建一个debugtalk.py文件。删除一个项目,自动删除对应的debugtalk.py文件。
GET | /debugtalks/ | .list() | 查询debugtalk列表 |
GET | /debugtalks/{id}/ | .retrieve() | 检索一条debugtalk的详细数据 |
点击文件
PUT | /debugtalks/{id}/ | update() | 更新一条数据中的全部字段 |
点击底部保存,更新文件。
创建与删除,是伴随项目 创建与删除的,所以内置文件的创建与删除,不是通过接口实现的。
from django.db import models
from utils.base_models import BaseModel
class 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_name
ordering = ('id',)
def __str__(self):
return self.name
这段代码定义了一个名为 DebugTalks 的 Django 模型(Model)类,表示一个 debugtalk.py 文件。
该模型类继承自 BaseModel,并包含以下字段:
此外,该模型类还定义了以下元数据(Meta):
通过这个模型类,可以在数据库中创建一个名为 tb_debugtalks 的表,存储 debugtalk.py 文件的信息,并与项目进行关联。
from rest_framework import serializers
from .models import DebugTalks
class DebugTalksModelSerializer(serializers.ModelSerializer):
project = serializers.SlugRelatedField(slug_field='name', read_only=True)
class Meta:
model = DebugTalks
exclude = ('create_datetime', 'update_datetime',)
extra_kwargs = {
'debugtalk': {
'write_only': True
}
}
class DebugTalksSerializer(serializers.ModelSerializer):
class Meta:
model = DebugTalks
fields = ('id', 'debugtalk')
定义了两个序列化器类:
1、DebugTalksModelSerializer 类继承自 DRF 的 ModelSerializer。其中:
2、DebugTalksSerializer 类也继承自 DRF 的 ModelSerializer。其中:
这些序列化器可以用于将 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 serializers
class DebugTalksViewSet(mixins.ListModelMixin,
mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
viewsets.GenericViewSet):
queryset = DebugTalks.objects.all()
serializer_class = serializers.DebugTalksModelSerializer
permission_classes = [permissions.IsAuthenticated]
def get_serializer_class(self):
return serializers.DebugTalksSerializer if self.action == 'retrieve' else self.serializer_class
首先导入了必要的库和模块:
然后定义了一个 DebugTalksViewSet 类,该类继承了 DRF 提供的各种 Mixin 类和 GenericViewSet 类。其中:
在类中定义了以下属性和方法:
接下来定义了一个自定义方法 get_serializer_class(),用于根据不同的动作决定使用哪个序列化器类。如果动作是 retrieve(详情展示),则使用 serializers.DebugTalksSerializer,否则使用默认的序列化器类。
通过这些配置和定义,DebugTalksViewSet 类可以提供列表展示、详情展示和更新功能,并根据不同的动作选择合适的序列化器类进行数据的序列化和反序列化操作。同时,该视图集还具备权限控制,只有认证的用户才能访问。