def post(self, request): """ 修改项目 :param request: :return: """ data = JSONParser().parse(request) result = self.parameter_check(data) if result: return result # 查找项目是否存在 try: obj = Project.objects.get(id=data["project_id"]) except ObjectDoesNotExist: return JsonResponse(code_msg=GlobalStatusCode.project_not_exist()) # 查找是否相同名称的项目 obi = Project.objects.filter(name=data["name"]).exclude( id=data["project_id"]) if len(obi) == 0: serializer = ProjectDeserializer(data=data) with transaction.atomic(): if serializer.is_valid(): # 修改项目 serializer.update(instance=obj, validated_data=data) # 记录动态 record_dynamic(project=data["project_id"], _type="修改", operationObject="项目", user=request.user.pk, data=data["name"]) return JsonResponse(code_msg=GlobalStatusCode.success()) else: return JsonResponse(code_msg=GlobalStatusCode.fail()) else: return JsonResponse(code_msg=GlobalStatusCode.name_repetition())
def del_history(request): """ 删除请求历史 project_id 项目ID api_id 接口ID history_id 请求历史ID :return: """ project_id = request.POST.get("project_id") api_id = request.POST.get("api_id") history_id = request.POST.get("history_id") if not project_id.isdecimal() or not api_id.isdecimal( ) or not history_id.isdecimal(): return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong()) obj = Project.objects.filter(id=project_id) if obj: obi = ApiInfo.objects.filter(id=api_id, project=project_id) if obi: obm = APIRequestHistory.objects.filter(id=history_id, apiInfo=api_id) if obm: obm.delete() api_record = ApiOperationHistory( apiInfo=ApiInfo.objects.get(id=api_id), user=User.objects.get(id=request.user.pk), description="删除请求历史记录") api_record.save() return JsonResponse(code_msg=GlobalStatusCode.success()) else: return JsonResponse( code_msg=GlobalStatusCode.history_not_exist()) else: return JsonResponse(code_msg=GlobalStatusCode.api_not_exist()) else: return JsonResponse(code_msg=GlobalStatusCode.project_not_exist())
def enable_host(request): """ 启用host project_id 项目ID host_id 地址ID :return: """ project_id = request.POST.get('project_id') host_id = request.POST.get('host_id') if not project_id.isdecimal() or not host_id.isdecimal(): return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong()) obj = Project.objects.filter(id=project_id) if obj: obi = GlobalHost.objects.filter(id=host_id, project=project_id) if obi: obi.update(status=True) record = ProjectDynamic(project=Project.objects.get(id=project_id), type='启用', operationObject='HOST', user=User.objects.get(id=request.user.pk), description='启用HOST“%s”' % obi[0].name) record.save() return JsonResponse(code_msg=GlobalStatusCode.success()) else: return JsonResponse(code_msg=GlobalStatusCode.host_not_exist()) else: return JsonResponse(code_msg=GlobalStatusCode.project_not_exist())
def get(self, request): """ 获取项目列表 :param request: :return: """ try: page_size = int(request.GET.get("page_size", 20)) page = int(request.GET.get("page", 1)) except (TypeError, ValueError): return JsonResponse(code_msg=GlobalStatusCode.page_not_int()) name = request.GET.get("name") if name: obi = Project.objects.filter(name__contains=name).order_by("id") else: obi = Project.objects.all().order_by("id") paginator = Paginator(obi, page_size) # paginator对象 total = paginator.num_pages # 总页数 try: obm = paginator.page(page) except PageNotAnInteger: obm = paginator.page(1) except EmptyPage: obm = paginator.page(paginator.num_pages) serialize = ProjectSerializer(obm, many=True) return JsonResponse(data={ "data": serialize.data, "page": page, "total": total }, code_msg=GlobalStatusCode.success())
def project_member(request): """ 获取成员信息 project_id 项目ID :return: """ try: page_size = int(request.GET.get('page_size', 20)) page = int(request.GET.get('page', 1)) except (TypeError, ValueError): return JsonResponse(code_msg=GlobalStatusCode.page_not_int()) project_id = request.GET.get('project_id') if not project_id.isdecimal(): return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong()) obj = Project.objects.filter(id=project_id) if obj: obi = ProjectMember.objects.filter(project=project_id).order_by('id') paginator = Paginator(obi, page_size) # paginator对象 total = paginator.num_pages # 总页数 try: obm = paginator.page(page) except PageNotAnInteger: obm = paginator.page(1) except EmptyPage: obm = paginator.page(paginator.num_pages) serialize = ProjectMemberSerializer(obm, many=True) return JsonResponse(data={ 'data': serialize.data, 'page': page, 'total': total }, code_msg=GlobalStatusCode.success()) else: return JsonResponse(code_msg=GlobalStatusCode.project_not_exist())
def dynamic(request): """ 获取动态数量 project_id 项目ID :return: """ try: page_size = int(request.GET.get("page_size", 20)) page = int(request.GET.get("page", 1)) except (TypeError, ValueError): return JsonResponse(code_msg=GlobalStatusCode.page_not_int()) project_id = request.GET.get("project_id") if not project_id.isdecimal(): return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong()) obi = Project.objects.filter(id=project_id) if obi: obj = ProjectDynamic.objects.filter(project=project_id).order_by("-time") paginator = Paginator(obj, page_size) # paginator对象 total = paginator.num_pages # 总页数 try: obm = paginator.page(page) except PageNotAnInteger: obm = paginator.page(1) except EmptyPage: obm = paginator.page(paginator.num_pages) serialize = ProjectDynamicSerializer(obm, many=True) return JsonResponse(data={"data": serialize.data, "page": page, "total": total }, code_msg=GlobalStatusCode.success()) else: return JsonResponse(code_msg=GlobalStatusCode.project_not_exist())
def post(self, request): """ 新增项目 :param request: :return: """ data = JSONParser().parse(request) result = self.parameter_check(data) if result: return result data["user"] = request.user.pk project_serializer = ProjectDeserializer(data=data) with transaction.atomic(): if project_serializer.is_valid(): # 保持新项目 project_serializer.save() # 记录动态 record_dynamic(project=project_serializer.data.get("id"), _type="添加", operationObject="项目", user=request.user.pk, data=data["name"]) # 创建项目的用户添加为该项目的成员 self.add_project_member(project_serializer.data.get("id"), request.user.pk) return JsonResponse( data={"project_id": project_serializer.data.get("id")}, code_msg=GlobalStatusCode.success()) else: return JsonResponse(code_msg=GlobalStatusCode.fail())
def post(self, request): """ 删除域名 :param request: :return: """ data = JSONParser().parse(request) result = self.parameter_check(data) if result: return result try: Project.objects.get(id=data["project_id"]) except ObjectDoesNotExist: return JsonResponse(code_msg=GlobalStatusCode.project_not_exist()) try: for j in data["ids"]: obj = GlobalHost.objects.filter(id=j) if obj: obj.delete() name = obj[0].name record_dynamic(project=data["project_id"], _type="删除", operationObject="域名", user=request.user.pk, data=name) return JsonResponse(code_msg=GlobalStatusCode.success()) except ObjectDoesNotExist: return JsonResponse(code_msg=GlobalStatusCode.project_not_exist())
def project_list(request): """ 获取项目列表 :param request: :return: """ try: page_size = int(request.GET.get('page_size', 20)) page = int(request.GET.get('page', 1)) except (TypeError, ValueError): return JsonResponse(code_msg=GlobalStatusCode.page_not_int()) name = request.GET.get('name') if name: obi = Project.objects.filter(name__contains=name).order_by('id') else: obi = Project.objects.all().order_by('id') paginator = Paginator(obi, page_size) # paginator对象 total = paginator.num_pages # 总页数 try: obm = paginator.page(page) except PageNotAnInteger: obm = paginator.page(1) except EmptyPage: obm = paginator.page(paginator.num_pages) serialize = ProjectSerializer(obm, many=True) return JsonResponse(data={ 'data': serialize.data, 'page': page, 'total': total }, code_msg=GlobalStatusCode.success())
def del_api(request): """ 删除接口 project_id 项目ID api_ids 接口ID列表 :return: """ project_id = request.POST.get("project_id") if not project_id.isdecimal(): return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong()) ids = request.POST.get("api_ids") id_list = ids.split(",") for i in id_list: if not i.isdecimal(): return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong()) obj = Project.objects.filter(id=project_id) if obj: for j in id_list: obi = ApiInfo.objects.filter(id=j, project=project_id) if len(obi) != 0: name = obi[0].name obi.delete() record_dynamic(project_id, "删除", "接口", "删除接口“%s”" % name) return JsonResponse(code_msg=GlobalStatusCode.success()) else: return JsonResponse(code_msg=GlobalStatusCode.project_not_exist())
def post(self, request): """ 添加Host :param request: :return: """ data = JSONParser().parse(request) result = self.parameter_check(data) if result: return result try: obj = Project.objects.get(id=data["project_id"]) except ObjectDoesNotExist: return JsonResponse(code_msg=GlobalStatusCode.project_not_exist()) obi = GlobalHost.objects.filter(name=data["name"], project=data["project_id"]) if obi: return JsonResponse(code_msg=GlobalStatusCode.name_repetition()) else: serializer = GlobalHostSerializer(data=data) with transaction.atomic(): if serializer.is_valid(): # 外键project_id serializer.save(project=obj) # 记录动态 record_dynamic(project=data["project_id"], _type="添加", operationObject="域名", user=request.user.pk, data=data["name"]) return JsonResponse( data={"host_id": serializer.data.get("id")}, code_msg=GlobalStatusCode.success()) return JsonResponse(code_msg=GlobalStatusCode.fail())
def update_group(request): """ 修改接口所属分组 project_id 项目ID api_ids 接口ID列表 first_group_id 一级分组ID second_group_id 二级分组ID :return: """ project_id = request.POST.get("project_id") ids = request.POST.get("api_ids") id_list = ids.split(",") first_group_id = request.POST.get("first_group_id") second_group_id = request.POST.get("second_group_id") if not project_id.isdecimal() or not first_group_id.isdecimal(): return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong()) obj = Project.objects.filter(id=project_id) if obj: api_first_group = ApiGroupLevelFirst.objects.filter(id=first_group_id) if api_first_group: if first_group_id and second_group_id: if not second_group_id.isdecimal(): return JsonResponse( code_msg=GlobalStatusCode.parameter_wrong()) api_second_group = ApiGroupLevelSecond.objects.filter( id=second_group_id) if api_second_group: for i in id_list: if not i.isdecimal(): return JsonResponse( code_msg=GlobalStatusCode.parameter_wrong()) for j in id_list: ApiInfo.objects.filter( id=j, project=project_id).update( apiGroupLevelFirst=ApiGroupLevelFirst.objects. get(id=first_group_id), apiGroupLevelSecond=ApiGroupLevelSecond. objects.get(id=second_group_id)) else: return JsonResponse( code_msg=GlobalStatusCode.group_not_exist()) elif first_group_id and second_group_id == "": for i in id_list: if not i.isdecimal(): return JsonResponse( code_msg=GlobalStatusCode.parameter_wrong()) for j in id_list: ApiInfo.objects.filter(id=j, project=project_id).update( apiGroupLevelFirst=ApiGroupLevelFirst.objects.get( id=first_group_id)) else: return JsonResponse( code_msg=GlobalStatusCode.parameter_wrong()) record_dynamic(project_id, "修改", "接口", "修改接口分组,列表“%s”" % id_list) return JsonResponse(code_msg=GlobalStatusCode.success()) else: return JsonResponse(code_msg=GlobalStatusCode.group_not_exist()) else: return JsonResponse(code_msg=GlobalStatusCode.project_not_exist())
def parameter_check(self, project_id): """ 校验参数 :param project_id: :return: """ try: # 校验project_id类型为int if not project_id.isdecimal(): return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong()) except KeyError: return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong())
def auto_test_report(request): """ 测试结果报告 project_id 项目ID :param request: :return: """ project_id = request.GET.get("project_id") time = request.GET.get('time') if not project_id.isdecimal(): return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong()) obi = Project.objects.filter(id=project_id) if obi: obj = AutomationTestCase.objects.filter(project=project_id) if obj: case = Q() for i in obj: case = case | Q(automationTestCase=i.pk) case_data = AutomationCaseApi.objects.filter(case) api = Q() if case_data: for j in case_data: api = api | Q(automationCaseApi=j.pk) data = AutomationAutoTestResultSerializer( AutomationCaseTestResult.objects.filter(api, testTime=time), many=True).data success = 0 fail = 0 not_run = 0 error = 0 for i in data: if i["result"] == "PASS": success = success + 1 elif i["result"] == "FAIL": fail = fail + 1 elif i["result"] == "ERROR": error = error + 1 else: not_run = not_run + 1 return JsonResponse(code_msg=GlobalStatusCode.success(), data={ "data": data, "total": len(data), "pass": success, "fail": fail, "error": error, "NotRun": not_run }) else: return JsonResponse(code_msg=GlobalStatusCode.success())
def parameter_check(self, data): """ 校验参数 :param data: :return: """ try: # 校验project_id类型为int if not isinstance(data["project_id"], int): return JsonResponse( code_msg=GlobalStatusCode.parameter_wrong()) except KeyError: return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong())
def project_info(request): """ 获取项目详情 project_id 项目id :return: """ project_id = request.GET.get("project_id") if not project_id.isdecimal(): return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong()) try: obj = Project.objects.get(id=project_id) serialize = ProjectSerializer(obj) return JsonResponse(data=serialize.data, code_msg=GlobalStatusCode.success()) except ObjectDoesNotExist: return JsonResponse(code_msg=GlobalStatusCode.project_not_exist())
def del_email(request): """ 删除邮箱配置 :param request: :return: """ project_id = request.POST.get("project_id") if not project_id.isdecimal(): return JsonResponse(code_msg=GlobalStatusCode.success()) obi = Project.objects.filter(id=project_id) if obi: AutomationReportSendConfig.objects.filter(project=project_id).delete() record_dynamic(project_id, "删除", "邮箱", "删除邮箱配置") return JsonResponse(code_msg=GlobalStatusCode.success()) else: return JsonResponse(code_msg=GlobalStatusCode.project_not_exist())
def del_project(request): """ 删除项目 project_id 待删除的项目ID :return: """ project_id = request.POST.get('ids') id_list = project_id.split(',') for i in id_list: if not i.isdecimal(): return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong()) for j in id_list: obj = Project.objects.filter(id=int(j)) if obj: obj.delete() return JsonResponse(code_msg=GlobalStatusCode.success())
def parameter_check(self, data): """ 验证参数 :param data: :return: """ try: # 必传参数 name, version, type if not data["name"] or not data["version"] or not data["type"]: return JsonResponse( code_msg=GlobalStatusCode.parameter_wrong()) # type 类型 Web, App if data["type"] not in ["Web", "App"]: return JsonResponse( code_msg=GlobalStatusCode.parameter_wrong()) except KeyError: return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong())
def add_group(request): """ 添加接口分组 project_id 项目ID name 名称 first_group_id 一级分组ID :return: """ project_id = request.POST.get("project_id") name = request.POST.get("name") first_group_id = request.POST.get("first_group_id") if not project_id.isdecimal(): return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong()) obj = Project.objects.filter(id=project_id) if obj: # 添加二级分组名称 if first_group_id: if not first_group_id.isdecimal(): return JsonResponse( code_msg=GlobalStatusCode.parameter_wrong()) obi = ApiGroupLevelFirst.objects.filter(id=first_group_id, project=project_id) if obi: obi = ApiGroupLevelSecond( apiGroupLevelFirst=ApiGroupLevelFirst.objects.get( id=first_group_id), name=name) obi.save() else: return JsonResponse( code_msg=GlobalStatusCode.group_not_exist()) # 添加一级分组名称 else: obi = ApiGroupLevelFirst( project=Project.objects.get(id=project_id), name=name) obi.save() record_dynamic(project=project_id, _type="新增", operationObject="接口分组", user=request.user.pk, data="新增接口分组“%s”" % obi.name) return JsonResponse(data={"group_id": obi.pk}, code_msg=GlobalStatusCode.success()) else: return JsonResponse(code_msg=GlobalStatusCode.project_not_exist())
def post(self, request, *args, **kwargs): serializer = self.serializer_class(data=request.data, context={'request': request}) serializer.is_valid(raise_exception=True) user = serializer.validated_data['user'] # token, created = Token.objects.get_or_create(user=user) data = TokenSerializer(Token.objects.get(user=user)).data return JsonResponse(data=data, code_msg=GlobalStatusCode.success())
def get(self, request): """ 获取项目详情 :param request: :return: """ project_id = request.GET.get("project_id") result = self.parameter_check(project_id) if result: return result # 查找项目是否存在 try: obj = Project.objects.get(id=project_id) except ObjectDoesNotExist: return JsonResponse(code_msg=GlobalStatusCode.project_not_exist()) serialize = ProjectSerializer(obj) return JsonResponse(data=serialize.data, code_msg=GlobalStatusCode.success())
def post(self, request): """ 删除项目 :param request: :return: """ data = JSONParser().parse(request) result = self.parameter_check(data) if result: return result try: for j in data["ids"]: obj = Project.objects.filter(id=j) obj.delete() return JsonResponse(code_msg=GlobalStatusCode.success()) except ObjectDoesNotExist: return JsonResponse(code_msg=GlobalStatusCode.project_not_exist())
def get_email(request): """ 获取邮箱配置 :param request: :return: """ project_id = request.GET.get("project_id") if not project_id.isdecimal(): return JsonResponse(code_msg=GlobalStatusCode.success()) obi = Project.objects.filter(id=project_id) if obi: data = AutomationReportSendConfigSerializer( AutomationReportSendConfig.objects.filter(project=project_id), many=True).data return JsonResponse(code_msg=GlobalStatusCode.success(), data=data) else: return JsonResponse(code_msg=GlobalStatusCode.project_not_exist())
def operation_history(request): """ 接口操作历史 project_id 项目ID api_id 接口ID page_size 条数 page 页码 :return: """ try: page_size = int(request.GET.get("page_size", 20)) page = int(request.GET.get("page", 1)) except (TypeError, ValueError): return JsonResponse(code_msg=GlobalStatusCode.page_not_int()) project_id = request.GET.get("project_id") api_id = request.GET.get("api_id") if not project_id.isdecimal() or not api_id.isdecimal(): return JsonResponse(code_msg=GlobalStatusCode.project_not_exist()) obj = Project.objects.filter(id=project_id) if obj: obi = ApiInfo.objects.filter(id=api_id, project=project_id) if obi: obn = ApiOperationHistory.objects.filter( apiInfo=api_id).order_by("-time") paginator = Paginator(obn, page_size) # paginator对象 total = paginator.num_pages # 总页数 try: obm = paginator.page(page) except PageNotAnInteger: obm = paginator.page(1) except EmptyPage: obm = paginator.page(paginator.num_pages) serialize = ApiOperationHistorySerializer(obm, many=True) return JsonResponse(data={ "data": serialize.data, "page": page, "total": total }, code_msg=GlobalStatusCode.success()) else: return JsonResponse(code_msg=GlobalStatusCode.api_not_exist()) else: return JsonResponse(code_msg=GlobalStatusCode.project_not_exist())
def verify(reality_parameter): """ :param reality_parameter: 实际参数 :return: """ if method == 'POST': parameter = dict(reality_parameter.POST.lists()) elif method == 'GET': parameter = dict(reality_parameter.GET.lists()) else: raise Exception if set(expect_parameter).issubset(list(parameter)): for i in expect_parameter: if parameter[i] == ['']: return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong()) else: return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong()) return func(reality_parameter)
def update_project(request): """ 修改项目 project_id: 项目唯一id name: 项目名称 v: 项目版本 type: 项目类型 description: 项目描述 :return: """ project_id = request.POST.get("project_id") if not project_id.isdecimal(): return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong()) name = request.POST.get("name") version = request.POST.get("v") _type = request.POST.get("type") description = request.POST.get("description") if _type in ["Web", "App"]: obj = Project.objects.filter(id=project_id) if obj: obi = Project.objects.filter(name=name).exclude(id=project_id) if len(obi) == 0: obj.update(name=name, version=version, type=_type, description=description, user=User.objects.get(id=request.user.pk)) record = ProjectDynamic( project=Project.objects.get(id=project_id), type="修改", operationObject="项目", user=User.objects.get(id=request.user.pk), description="修改项目“%s”" % name) record.save() return JsonResponse(code_msg=GlobalStatusCode.success()) else: return JsonResponse( code_msg=GlobalStatusCode.name_repetition()) else: return JsonResponse(code_msg=GlobalStatusCode.project_not_exist()) else: return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong())
def group(request): """ 接口分组 project_id 项目ID :return: """ project_id = request.GET.get("project_id") if not project_id.isdecimal(): return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong()) obj = Project.objects.filter(id=project_id) if obj: obi = ApiGroupLevelFirst.objects.filter( project=project_id).order_by("id") serialize = ApiGroupLevelFirstSerializer(obi, many=True) return JsonResponse(data=serialize.data, code_msg=GlobalStatusCode.success()) else: return JsonResponse(code_msg=GlobalStatusCode.project_not_exist())
def download(request): """ 获取Api下载文档路径 project_id 项目ID :param request: :return: """ project_id = request.GET.get("project_id") if not project_id.isdecimal(): return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong()) obj = Project.objects.filter(id=project_id) if obj: data = ApiInfoDocSerializer( ApiGroupLevelFirst.objects.filter(project=project_id), many=True).data url = Write().write_api(str(obj[0]), data) return JsonResponse(code_msg=GlobalStatusCode.success(), data=url) else: return JsonResponse(code_msg=GlobalStatusCode.project_not_exist())
def update_project(request): """ 修改项目 project_id: 项目唯一id name: 项目名称 v: 项目版本 type: 项目类型 description: 项目描述 :return: """ project_id = request.POST.get('project_id') if not project_id.isdecimal(): return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong()) name = request.POST.get('name') version = request.POST.get('v') _type = request.POST.get('type') description = request.POST.get('description') if _type in ['Web', 'App']: obj = Project.objects.filter(id=project_id) if obj: obi = Project.objects.filter(name=name).exclude(id=project_id) if len(obi) == 0: obj.update(name=name, version=version, type=_type, description=description, user=User.objects.get(id=request.user.pk)) record = ProjectDynamic( project=Project.objects.get(id=project_id), type='修改', operationObject='项目', user=User.objects.get(id=request.user.pk), description='修改项目“%s”' % name) record.save() return JsonResponse(code_msg=GlobalStatusCode.success()) else: return JsonResponse( code_msg=GlobalStatusCode.name_repetition()) else: return JsonResponse(code_msg=GlobalStatusCode.project_not_exist()) else: return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong())