当前位置: 首页 > news >正文

DjangoRF-11-创建testcases子应用--任务模块

这里先写任务应用,再写套件,然后写接口,最后再写请求,

这个是新的应用,要创建子应用,然后添加到settings的注册里面
在这里插入图片描述

1、和往常一样先写模型,序列化,权限,视图,urls,

1、创建任务模型
from django.db import models

from utils.models import BaseModel

from apps.projects.models import Project,Module,Environment,Interface

class Task(BaseModel):
name = models.CharField(‘任务名称’, max_length=200, help_text=‘测试任务名称’)
project = models.ForeignKey(Project, verbose_name=‘所属项目’,
on_delete=models.PROTECT, help_text=‘项目id’, related_name=‘tasks’)
modules = models.ManyToManyField(Module, verbose_name=‘负责的模块’, help_text=‘包含模块’)

def __str__(self):return self.nameclass Meta:db_table = 'tb_task'verbose_name = '测试任务'verbose_name_plural = verbose_nameconstraints = [models.UniqueConstraint(fields=['name', 'project'],name='unique_task_name')]

class TestSuit(BaseModel):

name = models.CharField('测试套件名称', max_length=200, help_text='测试套件名称')
task = models.ForeignKey(Task, verbose_name='测试任务', on_delete=models.PROTECT,help_text='测试任务id', related_name='test_suits')def __str__(self):return self.nameclass Meta:db_table = 'tb_test_suit'verbose_name = '测试套件'verbose_name_plural = verbose_nameconstraints = [models.UniqueConstraint(fields=['name', 'task'],name='unique_test_suit_name')]

记得进行数据迁移
2、写序列化
from rest_framework import serializers

from rest_framework.validators import UniqueTogetherValidator
from rest_framework.exceptions import ValidationError

from apps.testcases.models import Task,TestSuit
from apps.projects.models import Project

class TaskSerializer(serializers.ModelSerializer):

class Meta:model = Taskexclude = ['is_delete', 'u_time']validators = [UniqueTogetherValidator(queryset=model.objects.all(),fields=['name', 'project'])]def validate_modules(self, value):"""选择的模型要是当前项目的模型"""project_id = self.initial_data.get('project')queryset = Project.objects.filter(pk=project_id)if not queryset:raise ValidationError('id为{}的项目不存在'.format(project_id))# module表没有关联projects表,需要反向查找用module_set,拿到当前项目的模块 values_list ids 是个元组需要脱壳,ids = queryset.first().module_set.values_list('id')# 列表生成式 元组转化成列表ids = [item[0] for item in ids]for m in value:if m.id not in ids:raise ValidationError('id为{}的模块不在当前项目中'.format(m.id))return value

3、写权限
from utils.permissions import IsSuperUserOrReadOnly
from apps.projects.models import Project

class TaskPermission(IsSuperUserOrReadOnly):

def has_create_permission(self, request, view, obj):"""当前用户是否是当前项目的leader"""pk = request.data.get('project')queryset = Project.objects.filter(pk=pk)return queryset and queryset.first().leader == request.userdef has_update_delete_permission(self, request, view, obj):"""当前用户是否是当前项目的leader"""return obj.project.leader == request.user

4、写views
from django.shortcuts import render
from rest_framework.viewsets import ModelViewSet
from rest_framework.permissions import IsAuthenticated

from testcases.serializers import TaskSerializer
from utils.pagintion import TenItemPerPagePagination
from testcases.permissions import TaskPermission
from apps.testcases.models import Task

class TaskViewSet(ModelViewSet):
serializer_class = TaskSerializer
queryset = Task.objects.all().order_by(‘-c_time’)
# queryset = models.Task.objects.all()
permission_classes = [IsAuthenticated, TaskPermission]
pagination_class = TenItemPerPagePagination
# filterset_field = [‘project’] # 和下面一样
filterset_field = (‘project’,)

def perform_create(self, serializer):self.check_object_permissions(self.request, None)super().perform_create(serializer)

5、配置url
from . import views

route = DefaultRouter()
route.register(‘tasks’, views.TaskViewSet)
urlpatterns = route.urls

6、调试

相关文章:

DjangoRF-11-创建testcases子应用--任务模块

这里先写任务应用,再写套件,然后写接口,最后再写请求, 这个是新的应用,要创建子应用,然后添加到settings的注册里面 1、和往常一样先写模型,序列化,权限,视图&#xf…...

服务器数据恢复—SAN环境下LUN被重复映射导致写操作不互斥的数据恢复案例

服务器存储数据恢复环境: 一台存储中有一组由6块硬盘组成的RAID6,划分为若干LUN,MAP到不同业务的SOLARIS操作系统服务器上。 服务器存储故障: 由于业务变化需要增加一台服务器,在存储在线的状态下将该存储中的某个LUN映…...

Linux系统安全加固:从防火墙到SELinux策略

1. iptables防火墙配置 •基础规则设定:学习如何设置iptable的基本规则,包括允许/拒绝特定端口的进出流量,限制特定IP地址的访问等。 •状态检查:利用iptables的状态检查功能,只允许已建立连接或相关联的流量通过&am…...

排序算法:归并排序,golang实现

目录 前言 归并排序 代码示例 1. 算法包 2. 归并排序代码 3. 模拟程序 4. 运行程序 5. 从大到小排序 归并排序主要操作 1. 合并 2. 分割(Divide)与递归排序(Conquer) 总体思想 循环次数测试 假如 10 条数据进行排序…...

CSS 的工作原理

我们已经学习了CSS的基础知识,它的用途以及如何编写简单的样式表。在本课中,我们将了解浏览器如何获取 CSS 和 HTML 并将其转换为网页。 先决条件:已安装基本软件,了解处理文件的基本知识以及 HTML 基础知识(学习 HTML 简介。目的:要了解浏览器如何解析 CSS 和 HTML 的基…...

买完就后悔?只需几步教你 Apple 怎么申请退款

苹果系统不同于 Android 系统的一点在于下载某一些 App 的时候需要付费才能下载,但是有时候在我们付费之后突然就不想要购买了怎么办呢?别急这可以申请退款,你知道 Apple 怎么申请退款吗?下面就带大家了解一下 Apple 申请退款的步…...

【保卫战】休闲小游戏 链游

...

如何构建自己的交易机器人开发环境

作者:老余捞鱼 原创不易,转载请标明出处及原作者。 写在前面的话: 本文主要讲解如何构建一个交易机器人开发环境。描述具体的步骤和工具,包括使用 GitHub Codespaces、Visual Studio Code(VS Code)…...

解决WordPress文章引用的图片不显示问题

在使用WordPress发布文章时,有时会遇到复制发布的文档中包含的外链图片无法正常显示的问题。然而,当我们将图片路径复制到浏览器中单独打开时,图片却可以正常显示。以下是解决这一问题的方法。 问题描述 当你在WordPress文章中引用外链图片…...

商业银行国际结算规模创新高,合合信息AI助力金融行业智能处理多版式文档

随着我国外贸新业态的快速增长,银行国际结算业务在服务实体经济发展、促进贸易投资便利化进程中发挥了越来越重要的作用。根据中国银行业协会近日发布的《中国贸易金融行业发展报告(2023—2024)》,2023年我国主要商业银行国际结算…...

数字芯片设计验证经验分享:将ASIC IP核移植到FPGA上——更新概念并推动改变以完成充满挑战的任务!

作者:Philipp Jacobsohn,SmartDV首席应用工程师 Sunil Kumar,SmartDV FPGA设计总监 本系列文章从数字芯片设计项目技术总监的角度出发,介绍了如何将芯片的产品定义与设计和验证规划进行结合,详细讲述了在FPGA上使用I…...

【Linux】Linux下的日志(日常级)

日志是日后工作中非常重要的一部分,现在写一份简单的日志项目可以帮助我们熟悉并理解原理。 目录 设计思路:一些实现细节:代码:日志的使用方法: 设计思路: 图示是我们的最终目的。 设计一个类&#xff0…...

手把手教你如何在Linux上轻松安装Python,告别编程入门难题

导语: Python作为当下最热门的编程语言之一,受到了越来越多人的喜爱。对于Linux用户来说,掌握如何在Linux上安装Python至关重要。今天,就让我带领大家一步步在Linux上安装Python,让你轻松迈入编程世界! 一…...

XSS-labs靶场(超详解)1-20关——附原码

level1 原码 <!DOCTYPE html><!--STATUS OK--><html> <head> <meta http-equiv"content-type" content"text/html;charsetutf-8"> <script> window.alert function() { confirm("完成的不错&#xff0…...

【网络安全】LockBit病毒入侵揭秘:如何防范与应对

文章目录 前言 主要特征攻击手段演进历程主要威胁防范与对策 如何入门学习网络安全【黑客】 【----帮助网安学习&#xff0c;以下所有学习资料文末免费领取&#xff01;----】 大纲学习教程面试刷题 资料领取 前言 在数字时代&#xff0c;随着科技的飞速发展&#xff0c;网络…...

《开源大模型食用指南》适合中国宝宝的部署教程,基于Linux环境快速部署开源大模型

本项目是一个围绕开源大模型、针对国内初学者、基于 AutoDL 平台的中国宝宝专属大模型教程&#xff0c;针对各类开源大模型提供包括环境配置、本地部署、高效微调等技能在内的全流程指导&#xff0c;简化开源大模型的部署、使用和应用流程&#xff0c;让更多的普通学生、研究者…...

体验教程:通义灵码陪你备战求职季

本场景将带大家体验在技术面试准备场景下&#xff0c;如何通过使用阿里云通义灵码实现高效的编程算法题练习 、代码优化、技术知识查询等工作&#xff0c;帮助开发者提升实战能力&#xff0c;更加从容地应对面试挑战。主要包括&#xff1a; 1、模拟题练习&#xff1a;精心挑选…...

(070)爬楼梯

思路&#xff1a;一次爬一个或者一次爬两个楼梯,终止条件&#xff0c;即是当n1或n2时&#xff0c;完成操作&#xff0c;当n>2时&#xff0c;总方法就等于一次爬一个楼梯的方法数加上一次爬两个楼梯的方法数。 解法一&#xff1a;递归解法 if(n 1)return 1;if(n 2)return 2…...

el-table 表格序号列前端实现递增,切换分页不从头开始

<el-table-column type"index" width"55" label"序号" :index"hIndex"> </el-table-column> 分页 <el-pagination size-change"handleSizeChange" current-change"handleCurrentChange"> <…...

NSSCTF-Web题目27(Nginx漏洞、php伪协议、php解析绕过)

目录 [HNCTF 2022 WEEK2]easy_include 1、题目 2、知识点 3、思路 [NSSRound#8 Basic]MyDoor 4、题目 5、知识点 6、思路 [HNCTF 2022 WEEK2]easy_include 1、题目 2、知识点 nginx日志漏洞执行系统命令 3、思路 打开题目&#xff0c;出现源码 题目要我们上传一个fi…...

分割损失:Dice vs. IoU

NSDT工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割 对于医学影像分割&#xf…...

SpringBoot整合Juint,ssm框架

目录 SpringBoot整合Juint 1.导入相关的依赖 2.创建测试类&#xff0c;使用注解SpringBootTest SpringBoot整合ssm框架 1.使用脚手架创建Spring项目 2.修改pom.xml 我先修改了SpringBoot的版本&#xff0c;修改为2.3.10.RELEASE&#xff0c;因为SpringBoot版本太高会出现…...

基于supervisor制作基于环境变量配置的redis

背景&#xff1a; redis 的镜像很多很多&#xff0c;但都需要直接修改配置文件&#xff0c;不符合我们公司当前环境变量解决一切容易配置的思路。 材料&#xff1a; 1、CentOS-Base.repo [base] nameCentOS-$releasever enabled1 failovermethodpriority baseurlhttp://mirr…...

动态规划part01 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯

509. 斐波那契数 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#xff1a; F(0) 0&#xff0c;F(1) 1 F(n) F(n - 1) F(n - 2)&#xff0c;其中 …...

CSS实现图片边框酷炫效果

一、前言 我们在浏览一些网页时&#xff0c;经常会看到一些好看酷炫的元素边框效果&#xff08;如下图&#xff09;&#xff0c;那么这些效果是怎么实现的呢&#xff1f;我们知道&#xff0c;一般的边框&#xff0c;要么是实线&#xff0c;要么是虚线&#xff08;点状&#xf…...

遇到 MySQL 死锁问题如何解决?

终于来到死锁检查线程的第三步&#xff0c;可以解决死锁了。 作者&#xff1a;操盛春&#xff0c;爱可生技术专家&#xff0c;公众号『一树一溪』作者&#xff0c;专注于研究 MySQL 和 OceanBase 源码。 爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使用&#xff0…...

Pyinstaller打包OSError: could not get source code【终极解决】

pyinstaller 打包的时候&#xff0c;发现只要是torch.jit.script装饰的函数&#xff0c;会报以下错误&#xff1a; Traceback (most recent call last):File "torch/_sources.py", line 25, in get_source_lines_and_fileFile "inspect.py", line 1123, i…...

【计算机毕业设计】707高校宿舍管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…...

从C++看C#托管内存与非托管内存

进程的内存 一个exe文件&#xff0c;在没有运行时&#xff0c;其磁盘存储空间格式为函数代码段全局变量段。加载为内存后&#xff0c;其进程内存模式增加为函数代码段全局变量段函数调用栈堆区。我们重点讨论堆区。 托管堆与非托管堆 C# int a10这种代码申请的内存空间位于函…...

Linux进程间通信--IPC之无名管道

进程间通信&#xff08;IPC&#xff0c;InterProcess Communication&#xff09;是指在不同进程之间传播或交换信息。 IPC的方式通常有管道&#xff08;包括无名管道和命名管道&#xff09;、消息队列、信号量、共享存储、Socket、Streams支持不同主机上的两个进程的IPC。...

那种导航网站/百度手机极速版

其实是基本操作。。。。但我懒得每次都去想一遍&#xff0c;就记录一下。 问题是这样的比如我现在有一个矩阵是46*22的&#xff0c;但是我想要把它变成一维的1012*1。就很简单. [x,y]size(Bw); %确定矩阵维度 Brezeros(x*y,1); for i1:yfor j1:xBre((i-1)*xj)Bw(j,i); e…...

做网站 域名如何要回/代运营哪家公司最靠谱

python导出pdf&#xff0c;参考诸多资料&#xff0c;发现pdfkit是效果比较好的。故下载后进行了实现&#xff0c;多次失败后终于成功了&#xff0c;现将其中经验总结如下&#xff1a; """ 需要安装pdfkit&#xff0c;另外需要安装可执行文件wkhtmltopdf.exe&a…...

镇江建站/巩义网络推广公司

重新换回wamp3.1.3开发环境&#xff0c;发现不能切换版本&#xff0c;主要原因是不能添加php到环境变量里面&#xff0c;具体问题见这篇博客&#xff1a; https://blog.csdn.net/hu_feng903/article/details/81259834 但是去掉了php环境变量&#xff0c;composer这些要怎么用…...

哪个网站有高清图片做ppt/如何做电商新手入门

自从有了交易&#xff0c;有了商业&#xff0c;账本就作为记录财产和金钱的最基础形式而存在了数千年。而如今&#xff0c;随着纸张电子化及技术的进步&#xff0c;原本需要记录在纸张上的文字得以成为一行行的代码。这一大环境也造就了分布式账本技术的诞生。 英国首席科学家认…...

济南靠谱做网站公司/百度推广深圳分公司

Google 的 Git 源码库出现了一种新的操作系统叫 Fuchsia&#xff0c;目前有关新操作系统的信息很少&#xff0c;根据源码树&#xff1a;它使用的不是 Linux 内核而是叫 Magenta 的新内核&#xff1b;它的UI层使用的是 Dart 语言开发的 Flutter&#xff1b;渲染器是 Escher&…...

东莞建设网站推广公司地址/各种推广平台

http://blog.csdn.net/jay14/article/details/54074553 TLB原理 转载于:https://www.cnblogs.com/wangdgy/p/8465574.html...