Ejemplo n.º 1
0
 def addApi(data):
     with transaction.atomic():  # 执行错误后,帮助事物回滚
         try:
             serialize = ApiInfoDeserializer(data=data)
             if serialize.is_valid():
                 try:
                     obj = Project.objects.get(id=data["project_id"])
                     obi = ApiGroupLevelFirst.objects.get(
                         id=data["apiGroupLevelFirst_id"],
                         project=data["project_id"])
                     serialize.save(project=obj, apiGroupLevelFirst=obi)
                 except KeyError:
                     serialize.save(project=obj)
                 api_id = serialize.data.get("id")
                 data["id"] = api_id
                 if "headDict" in data and len(data.get("headDict")) > 0:
                     for i in data["headDict"]:
                         if i.get("name"):
                             i["api"] = api_id
                             head_serialize = ApiHeadDeserializer(data=i)
                             if head_serialize.is_valid():
                                 head_serialize.save(
                                     api=ApiInfo.objects.get(id=api_id))
                 if data["requestParameterType"] in (
                         "application/x-www-form-urlencoded",
                         "application/json", "text/plain"):
                     if "requestList" in data and len(
                             data.get("requestList")):
                         for i in data["requestList"]:
                             if i.get("name"):
                                 i["api"] = api_id
                                 param_serialize = ApiParameterDeserializer(
                                     data=i)
                                 if param_serialize.is_valid():
                                     param_serialize.save(
                                         api=ApiInfo.objects.get(id=api_id))
                 else:
                     if "requestList" in data and len(
                             data.get("requestList")):
                         ApiParameterRaw(api=ApiInfo.objects.get(id=api_id),
                                         data=data["requestList"]).save()
                 if "responseList" in data and len(
                         data.get("responseList")):
                     for i in data["responseList"]:
                         if i.get("name"):
                             i["api"] = api_id
                             response_serialize = ApiResponseDeserializer(
                                 data=i)
                             if response_serialize.is_valid():
                                 response_serialize.save(
                                     api=ApiInfo.objects.get(id=api_id))
                 return data
             else:
                 print("添加接口[%s]出现异常: %s" % (data["name"], serialize.error))
                 return None
         except:
             logging.error(traceback.format_exc())
Ejemplo n.º 2
0
 def post(self, request):
     """
     修改接口
     :param request:
     :return:
     """
     data = JSONParser().parse(request)
     result = self.parameter_check(data)
     if result:
         return result
     data["userUpdate"] = request.user.pk
     try:
         pro_data = Project.objects.get(id=data["project_id"])
     except ObjectDoesNotExist:
         return JsonResponse(code="999995", msg="项目不存在!")
     pro_data = ProjectSerializer(pro_data)
     if not pro_data.data["status"]:
         return JsonResponse(code="999985", msg="该项目已禁用")
     api_name = ApiInfo.objects.filter(name=data["name"], project=data["project_id"]).exclude(id=data["id"])
     if len(api_name):
         return JsonResponse(code="999997", msg="存在相同名称!")
     try:
         obi = ApiInfo.objects.get(id=data["id"])
     except ObjectDoesNotExist:
         return JsonResponse(code="999990", msg="接口不存在!")
     with transaction.atomic():
         try:
             serialize = ApiInfoDeserializer(data=data)
             if serialize.is_valid():
                 data["userUpdate"] = request.user
                 try:
                     if not isinstance(data["apiGroupLevelFirst_id"], int):
                         return JsonResponse(code="999996", msg="参数有误!")
                     ApiGroupLevelFirst.objects.get(id=data["apiGroupLevelFirst_id"], project=data["project_id"])
                     User.objects.get(id=request.user.pk)
                     serialize.update(instance=obi, validated_data=data)
                 except KeyError:
                     User.objects.get(id=request.user.pk)
                     serialize.update(instance=obi, validated_data=data)
                 try:
                     ApiHead.objects.filter(api=data["id"]).delete()
                     if len(data["headDict"]):
                         for i in data["headDict"]:
                             try:
                                 if i["name"]:
                                     i["api"] = data['id']
                                     head_serialize = ApiHeadDeserializer(data=i)
                                     if head_serialize.is_valid():
                                         head_serialize.save(api=ApiInfo.objects.get(id=data["id"]))
                             except KeyError:
                                 return JsonResponse(code="999996", msg="参数有误!")
                 except KeyError:
                     pass
                 ApiParameter.objects.filter(api=data["id"]).delete()
                 ApiParameterRaw.objects.filter(api=data["id"]).delete()
                 if data["requestParameterType"] == "form-data":
                     try:
                         if len(data["requestList"]):
                             for i in data["requestList"]:
                                 try:
                                     if i["name"]:
                                         i["api"] = data['id']
                                         param_serialize = ApiParameterDeserializer(data=i)
                                         if param_serialize.is_valid():
                                             param_serialize.save(api=ApiInfo.objects.get(id=data["id"]))
                                         else:
                                             return JsonResponse(code="999998", msg="失败!")
                                 except KeyError:
                                     return JsonResponse(code="999996", msg="参数有误!")
                     except KeyError:
                         pass
                 else:
                     try:
                         if len(data["requestList"]):
                             ApiParameterRaw(api=ApiInfo.objects.get(id=data['id']), data=data["requestList"]).save()
                     except KeyError:
                         pass
                 try:
                     ApiResponse.objects.filter(api=data["id"]).delete()
                     if len(data["responseList"]):
                         for i in data["responseList"]:
                             try:
                                 if i["name"]:
                                     i["api"] = data['id']
                                     response_serialize = ApiResponseDeserializer(data=i)
                                     if response_serialize.is_valid():
                                         response_serialize.save(api=ApiInfo.objects.get(id=data['id']))
                                     else:
                                         return JsonResponse(code="999998", msg="失败!")
                             except KeyError:
                                 return JsonResponse(code="999998", msg="失败!")
                 except KeyError:
                     pass
                 record_dynamic(project=data["project_id"],
                                _type="新增", operationObject="接口", user=request.user.pk,
                                data="新增接口“%s”" % data["name"])
                 api_record = ApiOperationHistory(api=ApiInfo.objects.get(id=data['id']),
                                                  user=User.objects.get(id=request.user.pk),
                                                  description="新增接口\"%s\"" % data["name"])
                 api_record.save()
                 return JsonResponse(code="999999", msg="成功!")
             return JsonResponse(code="999998", msg="失败!")
         except ObjectDoesNotExist:
             return JsonResponse(code="999991", msg="分组不存在!")
Ejemplo n.º 3
0
 def post(self, request):
     """
     新增接口
     :param request:
     :return:
     """
     data = JSONParser().parse(request)
     result = self.parameter_check(data)
     if result:
         return result
     data["userUpdate"] = request.user.pk
     try:
         obj = Project.objects.get(id=data["project_id"])
         if not request.user.is_superuser and obj.user.is_superuser:
             return JsonResponse(code="999983", msg="无操作权限!")
     except ObjectDoesNotExist:
         return JsonResponse(code="999995", msg="项目不存在!")
     pro_data = ProjectSerializer(obj)
     if not pro_data.data["status"]:
         return JsonResponse(code="999985", msg="该项目已禁用")
     api_name = ApiInfo.objects.filter(name=data["name"], project=data["project_id"])
     if len(api_name):
         return JsonResponse(code="999997", msg="存在相同名称!")
     else:
         with transaction.atomic(): # 执行错误后,帮助事物回滚
             try:
                 serialize = ApiInfoDeserializer(data=data)
                 if serialize.is_valid():
                     try:
                         if not isinstance(data["apiGroupLevelFirst_id"], int):
                             return JsonResponse(code="999996", msg="参数有误!")
                         obi = ApiGroupLevelFirst.objects.get(id=data["apiGroupLevelFirst_id"], project=data["project_id"])
                         serialize.save(project=obj, apiGroupLevelFirst=obi)
                     except KeyError:
                         serialize.save(project=obj)
                     api_id = serialize.data.get("id")
                     try:
                         if len(data["headDict"]):
                             for i in data["headDict"]:
                                 try:
                                     if i["name"]:
                                         i["api"] = api_id
                                         head_serialize = ApiHeadDeserializer(data=i)
                                         if head_serialize.is_valid():
                                             head_serialize.save(api=ApiInfo.objects.get(id=api_id))
                                 except KeyError:
                                     return JsonResponse(code="999996", msg="参数有误!")
                     except KeyError:
                         pass
                     if data["requestParameterType"] == "form-data":
                         try:
                             if len(data["requestList"]):
                                 for i in data["requestList"]:
                                     try:
                                         if i["name"]:
                                             i["api"] = api_id
                                             param_serialize = ApiParameterDeserializer(data=i)
                                             if param_serialize.is_valid():
                                                 param_serialize.save(api=ApiInfo.objects.get(id=api_id))
                                             else:
                                                 return JsonResponse(code="999998", msg="失败!")
                                     except KeyError:
                                         return JsonResponse(code="999996", msg="参数有误!")
                         except KeyError:
                             pass
                     else:
                         try:
                             if len(data["requestList"]):
                                 ApiParameterRaw(api=ApiInfo.objects.get(id=api_id), data=data["requestList"]).save()
                         except KeyError:
                             pass
                     try:
                         if len(data["responseList"]):
                             for i in data["responseList"]:
                                 try:
                                     if i["name"]:
                                         i["api"] = api_id
                                         response_serialize = ApiResponseDeserializer(data=i)
                                         if response_serialize.is_valid():
                                             response_serialize.save(api=ApiInfo.objects.get(id=api_id))
                                         else:
                                             return JsonResponse(code="999998", msg="失败!")
                                 except KeyError:
                                     logging.exception("Error")
                                     return JsonResponse(code="999998", msg="失败!")
                     except KeyError:
                         pass
                     record_dynamic(project=data["project_id"],
                                    _type="新增", operationObject="接口", user=request.user.pk,
                                    data="新增接口“%s”" % data["name"])
                     api_record = ApiOperationHistory(api=ApiInfo.objects.get(id=api_id),
                                                      user=User.objects.get(id=request.user.pk),
                                                      description="新增接口“%s”" % data["name"])
                     api_record.save()
                     return JsonResponse(code="999999", msg="成功!", data={"api_id": api_id})
                 return JsonResponse(code="999998", msg="失败!")
             except ObjectDoesNotExist:
                 return JsonResponse(code="999991", msg="分组不存在!")
def add_swagger_api(data, user):
    """
    swagger接口写入数据库
    :param data:  json数据
    :param user:  用户model
    :return:
    """
    obj = Project.objects.filter(id=data["project_id"])
    if obj:
        try:
            with transaction.atomic():
                oba = ApiInfo(
                    project=Project.objects.get(id=data["project_id"]),
                    name=data["name"],
                    httpType=data["httpType"],
                    status=data["status"],
                    requestType=data["requestType"],
                    apiAddress=data["address"],
                    requestParameterType=data["requestParameterType"],
                    mockCode=data["mockStatus"],
                    data=data["code"],
                    userUpdate=User.objects.get(id=user.pk),
                    description=data["desc"])
                oba.save()
                if len(data["headDict"]):
                    for i in data["headDict"]:
                        try:
                            if i["name"]:
                                ApiHead(api=ApiInfo.objects.get(id=oba.pk),
                                        name=i["name"],
                                        value=i["value"]).save()
                        except KeyError:
                            logging.exception("Error")
                if data["requestParameterType"] == "form-data":
                    if len(data["requestList"]):
                        for i in data["requestList"]:
                            try:
                                # i = i.replace("true", "True").replace("false", "False")
                                if i["name"]:
                                    ApiParameter(
                                        api=ApiInfo.objects.get(id=oba.pk),
                                        name=i["name"],
                                        value=i["value"],
                                        required=i["required"],
                                        _type=i["_type"],
                                        restrict=i["restrict"],
                                        description=i["description"]).save()
                            except KeyError:
                                logging.exception("Error")
                else:
                    if len(data["requestList"]):
                        _data = data["requestList"].replace("\'", "\"")
                        ApiParameterRaw(api=ApiInfo.objects.get(id=oba.pk),
                                        data=_data).save()
                if len(data["responseList"]):
                    for i in data["responseList"]:
                        try:
                            # i = i.replace("true", "True").replace("false", "False")
                            if i["name"]:
                                ApiResponse(
                                    api=ApiInfo.objects.get(id=oba.pk),
                                    name=i["name"],
                                    value=i["value"],
                                    required=i["required"],
                                    _type=i["_type"],
                                    description=i["description"]).save()
                        except KeyError:
                            logging.exception("Error")
                record_dynamic(data["project_id"], "新增", "接口",
                               "新增接口“%s”" % data["name"])
                api_record = ApiOperationHistory(
                    apiInfo=ApiInfo.objects.get(id=oba.pk),
                    user=User.objects.get(id=user.pk),
                    description="新增接口\"%s\"" % data["name"])
                api_record.save()
        except Exception as e:
            logging.exception("error")
            logging.error(e)
Ejemplo n.º 5
0
def update_api(request):
    """
    修改接口信息
    project_id 项目ID
    api_id 接口ID
    first_group_id 一级分组ID
    second_group_id 二级分组ID
    name 接口名称
    httpType  HTTP/HTTPS
    requestType 请求方式
    address  请求地址
    headDict 头文件
    requestParameterType 参数请求格式
    requestList 请求参数列表
    responseList 返回参数列表
    mockStatus  mockhttp状态
    code mock代码
    description 描述
    :return:
    """
    data = json.loads(request.body)
    if not data["project_id"] or not data["first_group_id"] or not data["name"] or not data["httpType"] or not \
            data["requestType"] or not data["address"] or not data["requestParameterType"] or not data["status"] or \
            not data["api_id"]:
        return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong())
    if not isinstance(data["project_id"], int) or not isinstance(data["first_group_id"], int) or \
            not isinstance(data["api_id"], int):
        return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong())
    if data["status"] not in ["True", "False"]:
        return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong())
    if not isinstance(data["project_id"], int) or not isinstance(
            data["first_group_id"], int):
        return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong())
    if data["httpType"] not in ["HTTP", "HTTPS"]:
        return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong())
    if data["requestType"] not in ["POST", "GET", "PUT", "DELETE"]:
        return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong())
    if data["requestParameterType"] not in ["form-data", "raw", "Restful"]:
        return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong())
    obj = Project.objects.filter(id=data["project_id"])
    if obj:
        obm = ApiInfo.objects.filter(id=data["api_id"],
                                     project=data["project_id"])
        if obm:
            obi = ApiInfo.objects.filter(
                name=data["name"],
                project=data["project_id"]).exclude(id=data["api_id"])
            if len(obi) == 0:
                try:
                    with transaction.atomic():
                        first_group = ApiGroupLevelFirst.objects.filter(
                            id=data["first_group_id"],
                            project=data["project_id"])
                        if len(first_group) == 0:
                            return JsonResponse(
                                code_msg=GlobalStatusCode.group_not_exist())
                        if data["first_group_id"] and data["second_group_id"]:
                            if not isinstance(data["second_group_id"], int):
                                return JsonResponse(code_msg=GlobalStatusCode.
                                                    parameter_wrong())
                            second_group = ApiGroupLevelSecond.objects.filter(
                                id=data["second_group_id"],
                                apiGroupLevelFirst=data["first_group_id"])
                            if len(second_group) == 0:
                                return JsonResponse(code_msg=GlobalStatusCode.
                                                    group_not_exist())
                            try:
                                obm.update(
                                    project=Project.objects.get(
                                        id=data["project_id"]),
                                    apiGroupLevelFirst=ApiGroupLevelFirst.
                                    objects.get(id=data["first_group_id"]),
                                    apiGroupLevelSecond=ApiGroupLevelSecond.
                                    objects.get(id=data["second_group_id"]),
                                    name=data["name"],
                                    httpType=data["httpType"],
                                    requestType=data["requestType"],
                                    apiAddress=data["address"],
                                    requestParameterType=data[
                                        "requestParameterType"],
                                    mockCode=data["mockStatus"],
                                    data=data["code"],
                                    status=data["status"],
                                    userUpdate=User.objects.get(
                                        id=request.user.pk),
                                    description=data["description"])
                            except KeyError:
                                return JsonResponse(code_msg=GlobalStatusCode.
                                                    parameter_wrong())
                        else:
                            return JsonResponse(
                                code_msg=GlobalStatusCode.parameter_wrong())
                        if len(data["headDict"]):
                            _list = []
                            for j in data["headDict"]:
                                try:
                                    _list.append(j["id"])
                                except KeyError:
                                    pass
                            parameter = ApiHead.objects.filter(
                                api=data["api_id"])
                            for n in parameter:
                                if n.pk not in _list:
                                    n.delete()
                            for i in data["headDict"]:
                                if i["name"]:
                                    try:
                                        ApiHead.objects.filter(id=i["id"], api=data["api_id"]).\
                                            update(name=i["name"], value=i["value"])
                                    except KeyError:
                                        ApiHead(api=ApiInfo.objects.get(
                                            id=data["api_id"]),
                                                name=i["name"],
                                                value=i["value"]).save()
                        if data["requestParameterType"] == "form-data":
                            ApiParameterRaw.objects.filter(
                                api=data["api_id"]).delete()
                            if len(data["requestList"]):
                                _list = []
                                for j in data["requestList"]:
                                    try:
                                        _list.append(j["id"])
                                    except KeyError:
                                        pass
                                parameter = ApiParameter.objects.filter(
                                    api=data["api_id"])
                                for n in parameter:
                                    if n.pk not in _list:
                                        n.delete()
                                for i in data["requestList"]:
                                    try:
                                        if i["name"]:
                                            try:
                                                ApiParameter.objects.filter(id=i["id"], api=data["api_id"]).\
                                                    update(name=i["name"], value=i["value"], required=i["required"],
                                                           restrict=i["restrict"], _type=i["_type"],
                                                           description=i["description"])
                                            except KeyError:
                                                ApiParameter(
                                                    api=ApiInfo.objects.get(
                                                        id=data["api_id"]),
                                                    name=i["name"],
                                                    value=i["value"],
                                                    required=i["required"],
                                                    _type=i["_type"],
                                                    description=i[
                                                        "description"]).save()
                                    except KeyError:
                                        logging.exception("Error")
                                        return JsonResponse(
                                            code_msg=GlobalStatusCode.
                                            parameter_wrong())

                        else:
                            ApiParameterRaw.objects.filter(
                                api=data["api_id"]).delete()
                            ApiParameter.objects.filter(
                                api=data["api_id"]).delete()
                            if data["requestList"]:
                                ApiParameterRaw(
                                    api=ApiInfo.objects.get(id=data["api_id"]),
                                    data=data["requestList"]).save()

                        if len(data["responseList"]):
                            _list = []
                            for j in data["responseList"]:
                                try:
                                    _list.append(j["id"])
                                except KeyError:
                                    pass
                            parameter = ApiResponse.objects.filter(
                                api=data["api_id"])
                            for n in parameter:
                                if n.pk not in _list:
                                    n.delete()
                            for i in data["responseList"]:
                                if i["name"]:
                                    try:
                                        ApiResponse.objects.filter(id=i["id"], api=data["api_id"]).\
                                            update(name=i["name"], value=i["value"], required=i["required"],
                                                   _type=i["_type"],
                                                   description=i["description"])
                                    except KeyError:
                                        ApiResponse(
                                            api=ApiInfo.objects.get(
                                                id=data["api_id"]),
                                            name=i["name"],
                                            value=i["value"],
                                            required=i["required"],
                                            _type=i["_type"],
                                            description=i["description"]).save(
                                            )
                            record_dynamic(data["project_id"], "修改", "接口",
                                           "修改接口“%s”" % data["name"])
                        api_record = ApiOperationHistory(
                            apiInfo=ApiInfo.objects.get(id=data["api_id"]),
                            user=User.objects.get(id=request.user.pk),
                            description="修改接口\"%s\"" % data["name"])
                        api_record.save()
                        return JsonResponse(
                            code_msg=GlobalStatusCode.success())
                except Exception as e:
                    logging.exception("ERROR")
                    logging.error(e)
                    return JsonResponse(code_msg=GlobalStatusCode.fail())
            else:
                return JsonResponse(code_msg=GlobalStatusCode.api_is_exist())
        else:
            return JsonResponse(code_msg=GlobalStatusCode.api_not_exist())
    else:
        return JsonResponse(code_msg=GlobalStatusCode.project_not_exist())
Ejemplo n.º 6
0
def add_api(request):
    """
    新增接口信息
    project_id 项目ID
    first_group_id 一级分组ID
    second_group_id 二级分组ID
    name 接口名称
    httpType  HTTP/HTTPS
    requestType 请求方式
    address  请求地址
    headDict 头文件
    requestParameterType 参数请求格式
    requestList 请求参数列表
    responseList 返回参数列表
    mockStatus  mockhttp状态
    code mock代码
    description 描述
    :return:
    """
    data = json.loads(request.body)
    if not data["project_id"] or not data["first_group_id"] or not data["name"] or not data["httpType"] or not \
            data["requestType"] or not data["address"] or not data["requestParameterType"] or not data["status"]:
        return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong())
    if data["status"] not in ["True", "False"]:
        return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong())
    if not isinstance(data["project_id"], int) or not isinstance(
            data["first_group_id"], int):
        return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong())
    if data["httpType"] not in ["HTTP", "HTTPS"]:
        return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong())
    if data["requestType"] not in ["POST", "GET", "PUT", "DELETE"]:
        return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong())
    if data["requestParameterType"] not in ["form-data", "raw", "Restful"]:
        return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong())
    obj = Project.objects.filter(id=data["project_id"])
    if obj:
        obi = ApiInfo.objects.filter(name=data["name"],
                                     project=data["project_id"])
        if obi:
            return JsonResponse(code_msg=GlobalStatusCode.name_repetition())
        else:
            try:
                with transaction.atomic():
                    first_group = ApiGroupLevelFirst.objects.filter(
                        id=data["first_group_id"], project=data["project_id"])
                    if len(first_group) == 0:
                        return JsonResponse(
                            code_msg=GlobalStatusCode.group_not_exist())
                    if data["first_group_id"] and data["second_group_id"]:
                        if not isinstance(data["second_group_id"], int):
                            return JsonResponse(
                                code_msg=GlobalStatusCode.parameter_wrong())
                        second_group = ApiGroupLevelSecond.objects.filter(
                            id=data["second_group_id"],
                            apiGroupLevelFirst=data["first_group_id"])
                        if len(second_group) == 0:
                            return JsonResponse(
                                code_msg=GlobalStatusCode.group_not_exist())
                        try:
                            oba = ApiInfo(
                                project=Project.objects.get(
                                    id=data["project_id"]),
                                apiGroupLevelFirst=ApiGroupLevelFirst.objects.
                                get(id=data["first_group_id"]),
                                apiGroupLevelSecond=ApiGroupLevelSecond.
                                objects.get(id=data["second_group_id"]),
                                name=data["name"],
                                httpType=data["httpType"],
                                status=data["status"],
                                requestType=data["requestType"],
                                apiAddress=data["address"],
                                requestParameterType=data[
                                    "requestParameterType"],
                                mockCode=data["mockStatus"],
                                data=data["code"],
                                userUpdate=User.objects.get(
                                    id=request.user.pk),
                                description=data["desc"])
                        except KeyError:
                            return JsonResponse(
                                code_msg=GlobalStatusCode.parameter_wrong())
                    else:
                        return JsonResponse(
                            code_msg=GlobalStatusCode.parameter_wrong())
                    oba.save()
                    if len(data["headDict"]):
                        for i in data["headDict"]:
                            try:
                                if i["name"]:
                                    ApiHead(api=ApiInfo.objects.get(id=oba.pk),
                                            name=i["name"],
                                            value=i["value"]).save()
                            except KeyError:
                                logging.exception("Error")
                                return JsonResponse(GlobalStatusCode.fail())
                    if data["requestParameterType"] == "form-data":
                        if len(data["requestList"]):
                            for i in data["requestList"]:
                                try:
                                    # i = i.replace("true", "True").replace("false", "False")
                                    if i["name"]:
                                        ApiParameter(
                                            api=ApiInfo.objects.get(id=oba.pk),
                                            name=i["name"],
                                            value=i["value"],
                                            required=i["required"],
                                            _type=i["_type"],
                                            restrict=i["restrict"],
                                            description=i["description"]).save(
                                            )
                                except KeyError:
                                    logging.exception("Error")
                                    return JsonResponse(
                                        code_msg=GlobalStatusCode.fail())
                    else:
                        if len(data["requestList"]):
                            ApiParameterRaw(api=ApiInfo.objects.get(id=oba.pk),
                                            data=data["requestList"]).save()
                    if len(data["responseList"]):
                        for i in data["responseList"]:
                            try:
                                # i = i.replace("true", "True").replace("false", "False")
                                if i["name"]:
                                    ApiResponse(
                                        api=ApiInfo.objects.get(id=oba.pk),
                                        name=i["name"],
                                        value=i["value"],
                                        required=i["required"],
                                        _type=i["_type"],
                                        description=i["description"]).save()
                            except KeyError:
                                logging.exception("Error")
                                return JsonResponse(
                                    code_msg=GlobalStatusCode.fail())
                    record_dynamic(data["project_id"], "新增", "接口",
                                   "新增接口“%s”" % data["name"])
                    api_record = ApiOperationHistory(
                        apiInfo=ApiInfo.objects.get(id=oba.pk),
                        user=User.objects.get(id=request.user.pk),
                        description="新增接口\"%s\"" % data["name"])
                    api_record.save()
                    return JsonResponse(data={"api_id": oba.pk},
                                        code_msg=GlobalStatusCode.success())
            except Exception as e:
                logging.exception("error")
                logging.error(e)
                return JsonResponse(code_msg=GlobalStatusCode.fail())
    else:
        return JsonResponse(code_msg=GlobalStatusCode.project_not_exist())
Ejemplo n.º 7
0
def add_swagger_api(data, user):
    """
    swagger接口写入数据库
    :param data:  json数据
    :param user:  用户model
    :return:
    """
    obj = Project.objects.filter(id=data["project_id"])
    if obj:
        try:
            with transaction.atomic():
                serialize = ApiInfoDeserializer(data=data)
                if serialize.is_valid():
                    serialize.save(project=obj)
                    api_id = serialize.data.get("id")
                    try:
                        if len(data["headDict"]):
                            for i in data["headDict"]:
                                try:
                                    if i["name"]:
                                        i["api"] = api_id
                                        head_serialize = ApiHeadDeserializer(
                                            data=i)
                                        if head_serialize.is_valid():
                                            head_serialize.save(
                                                api=ApiInfo.objects.get(
                                                    id=api_id))
                                except KeyError:
                                    pass
                    except KeyError:
                        pass
                    if data["requestParameterType"] == "form-data":
                        try:
                            if len(data["requestList"]):
                                for i in data["requestList"]:
                                    try:
                                        if i["name"]:
                                            i["api"] = api_id
                                            param_serialize = ApiParameterDeserializer(
                                                data=i)
                                            if param_serialize.is_valid():
                                                param_serialize.save(
                                                    api=ApiInfo.objects.get(
                                                        id=api_id))
                                    except KeyError:
                                        pass
                        except KeyError:
                            pass
                    else:
                        try:
                            if len(data["requestList"]):
                                ApiParameterRaw(
                                    api=ApiInfo.objects.get(id=api_id),
                                    data=data["requestList"]).save()
                        except KeyError:
                            pass
                    try:
                        if len(data["responseList"]):
                            for i in data["responseList"]:
                                try:
                                    if i["name"]:
                                        i["api"] = api_id
                                        response_serialize = ApiResponseDeserializer(
                                            data=i)
                                        if response_serialize.is_valid():
                                            response_serialize.save(
                                                api=ApiInfo.objects.get(
                                                    id=api_id))
                                except KeyError:
                                    pass
                    except KeyError:
                        pass
                    record_dynamic(project=data["project_id"],
                                   _type="新增",
                                   operationObject="接口",
                                   user=user.pk,
                                   data="新增接口“%s”" % data["name"])
                    api_record = ApiOperationHistory(
                        apiInfo=ApiInfo.objects.get(id=api_id),
                        user=User.objects.get(id=user.pk),
                        description="新增接口\"%s\"" % data["name"])
                    api_record.save()
        except Exception as e:
            logging.exception("error")
            logging.error(e)
Ejemplo n.º 8
0
 def updateApi(data):
     with transaction.atomic():
         try:
             serialize = ApiInfoDeserializer(data=data)
             if serialize.is_valid():
                 try:
                     data["userUpdate"] = User.objects.get(
                         id=data["userUpdate"])
                     obi = ApiInfo.objects.get(id=data["id"])
                     serialize.update(instance=obi, validated_data=data)
                 except KeyError:
                     serialize.update(instance=obi, validated_data=data)
                 header = Q()
                 if "headDict" in data and len(data.get("headDict")):
                     for i in data["headDict"]:
                         if i.get("api") and i.get("id"):
                             header = header | Q(id=i["id"])
                             if i["name"]:
                                 head_serialize = ApiHeadDeserializer(
                                     data=i)
                                 if head_serialize.is_valid():
                                     i["api"] = ApiInfo.objects.get(
                                         id=i["api"])
                                     head_serialize.update(
                                         instance=ApiHead.objects.get(
                                             id=i["id"]),
                                         validated_data=i)
                         else:
                             if i.get("name"):
                                 i["api"] = data['id']
                                 head_serialize = ApiHeadDeserializer(
                                     data=i)
                                 if head_serialize.is_valid():
                                     head_serialize.save(
                                         api=ApiInfo.objects.get(
                                             id=data["id"]))
                                     header = header | Q(
                                         id=head_serialize.data.get("id"))
                 ApiHead.objects.exclude(header).filter(
                     api=data["id"]).delete()
                 api_param = Q()
                 api_param_raw = Q()
                 if "requestList" in data and len(data.get("requestList")):
                     if data["requestParameterType"] in (
                             "application/x-www-form-urlencoded",
                             "application/json", "text/plain"):
                         ApiParameterRaw.objects.filter(
                             api=data["id"]).delete()
                         for i in data["requestList"]:
                             if i.get("api") and i.get("id"):
                                 api_param = api_param | Q(id=i["id"])
                                 if i["name"]:
                                     param_serialize = ApiParameterDeserializer(
                                         data=i)
                                     if param_serialize.is_valid():
                                         i["api"] = ApiInfo.objects.get(
                                             id=i["api"])
                                         param_serialize.update(
                                             instance=ApiParameter.objects.
                                             get(id=i["id"]),
                                             validated_data=i)
                             else:
                                 if i.get("name"):
                                     i["api"] = data['id']
                                     param_serialize = ApiParameterDeserializer(
                                         data=i)
                                     if param_serialize.is_valid():
                                         param_serialize.save(
                                             api=ApiInfo.objects.get(
                                                 id=data["id"]))
                                         api_param = api_param | Q(
                                             id=param_serialize.data.get(
                                                 "id"))
                     else:
                         try:
                             obj = ApiParameterRaw.objects.get(
                                 api=data["id"])
                             obj.data = data["requestList"]
                             obj.save()
                         except ObjectDoesNotExist:
                             obj = ApiParameterRaw(
                                 api=ApiInfo.objects.get(id=data['id']),
                                 data=data["requestList"])
                             obj.save()
                         api_param_raw = api_param_raw | Q(id=obj.id)
                 ApiParameter.objects.exclude(api_param).filter(
                     api=data["id"]).delete()
                 ApiParameterRaw.objects.exclude(api_param_raw).filter(
                     api=data["id"]).delete()
                 api_response = Q()
                 if "responseList" in data and len(
                         data.get("responseList")):
                     for i in data["responseList"]:
                         if i.get("api") and i.get("id"):
                             api_response = api_response | Q(id=i["id"])
                             if i["name"]:
                                 response_serialize = ApiResponseDeserializer(
                                     data=i)
                                 if response_serialize.is_valid():
                                     i["api"] = ApiInfo.objects.get(
                                         id=i["api"])
                                     response_serialize.update(
                                         instance=ApiResponse.objects.get(
                                             id=i["id"]),
                                         validated_data=i)
                         else:
                             if i.get("name"):
                                 i["api"] = data['id']
                                 response_serialize = ApiResponseDeserializer(
                                     data=i)
                                 if response_serialize.is_valid():
                                     response_serialize.save(
                                         api=ApiInfo.objects.get(
                                             id=data["id"]))
                                     api_response = api_response | Q(
                                         id=response_serialize.data.get(
                                             "id"))
                 ApiResponse.objects.exclude(api_response).filter(
                     api=data["id"]).delete()
                 return data
             else:
                 print("更新接口[%s]出现异常: %s" % (data["name"], serialize.error))
                 return None
         except:
             logging.error(traceback.format_exc())
Ejemplo n.º 9
0
def update_api(request):
    """
    修改接口信息
    project_id 项目ID
    api_id 接口ID
    first_group_id 一级分组ID
    second_group_id 二级分组ID
    name 接口名称
    httpType  HTTP/HTTPS
    requestType 请求方式
    address  请求地址
    headDict 头文件
    requestParameterType 参数请求格式
    requestList 请求参数列表
    responseList 返回参数列表
    mockStatus  mockhttp状态
    code mock代码
    description 描述
    :return:
    """
    project_id = request.POST.get('project_id')
    api_id = request.POST.get('api_id')
    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 api_id.isdecimal(
    ) or not first_group_id.isdecimal():
        return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong())
    name = request.POST.get('name')
    http_type = request.POST.get('httpType')
    request_type = request.POST.get('requestType')
    address = request.POST.get('address')
    head_dict = request.POST.get('headDict')
    request_parameter_type = request.POST.get('requestParameterType')
    request_list = request.POST.get('requestList')
    response_list = request.POST.get('responseList')
    mock_status = request.POST.get('mockStatus')
    code = request.POST.get('code')
    description = request.POST.get('description')
    status = request.POST.get('status')
    if status not in ['True', 'False']:
        return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong())
    if http_type not in ['HTTP', 'HTTPS']:
        return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong())
    if request_type not in ['POST', 'GET', 'PUT', 'DELETE']:
        return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong())
    if request_parameter_type not in ['form-data', 'raw', 'Restful']:
        return JsonResponse(code_msg=GlobalStatusCode.parameter_wrong())
    obj = Project.objects.filter(id=project_id)
    if obj:
        obm = ApiInfo.objects.filter(id=api_id, project=project_id)
        if obm:
            obi = ApiInfo.objects.filter(name=name,
                                         project=project_id).exclude(id=api_id)
            if len(obi) == 0:
                try:
                    with transaction.atomic():
                        first_group = ApiGroupLevelFirst.objects.filter(
                            id=first_group_id, project=project_id)
                        if len(first_group) == 0:
                            return JsonResponse(
                                code_msg=GlobalStatusCode.group_not_exist())
                        if first_group_id and second_group_id:
                            if not second_group_id.isdecimal():
                                return JsonResponse(code_msg=GlobalStatusCode.
                                                    parameter_wrong())
                            second_group = ApiGroupLevelSecond.objects.filter(
                                id=second_group_id,
                                apiGroupLevelFirst=first_group_id)
                            if len(second_group) == 0:
                                return JsonResponse(code_msg=GlobalStatusCode.
                                                    group_not_exist())
                            obm.update(
                                project=Project.objects.get(id=project_id),
                                apiGroupLevelFirst=ApiGroupLevelFirst.objects.
                                get(id=first_group_id),
                                apiGroupLevelSecond=ApiGroupLevelSecond.
                                objects.get(id=second_group_id),
                                name=name,
                                httpType=http_type,
                                requestType=request_type,
                                apiAddress=address,
                                requestParameterType=request_parameter_type,
                                mockCode=mock_status,
                                data=code,
                                userUpdate=User.objects.get(
                                    id=request.user.pk),
                                description=description)
                        else:
                            return JsonResponse(
                                code_msg=GlobalStatusCode.parameter_wrong())
                        if head_dict:
                            head = re.findall('{.*?}', head_dict)
                            _list = []
                            for j in head:
                                try:
                                    j = eval(j)
                                    try:
                                        _list.append(j["id"])
                                    except KeyError:
                                        pass
                                except:
                                    return JsonResponse(
                                        code_msg=GlobalStatusCode.fail())
                            parameter = ApiHead.objects.filter(api=api_id)
                            for n in parameter:
                                if n.pk not in _list:
                                    n.delete()
                            for i in head:
                                try:
                                    i = eval(i)
                                    if i['name']:
                                        try:
                                            ApiHead.objects.filter(id=i['id'], api=api_id).\
                                                update(name=i['name'], value=i['value'])
                                        except KeyError:
                                            ApiHead(api=ApiInfo.objects.get(
                                                id=api_id),
                                                    name=i['name'],
                                                    value=i['value']).save()
                                except Exception as e:
                                    logging.exception("Error")
                                    return JsonResponse(
                                        code_msg=GlobalStatusCode.fail())
                        if request_parameter_type == 'form-data':
                            ApiParameterRaw.objects.filter(api=api_id).delete()
                            if request_list:
                                request_list = re.findall(
                                    '{.*?}', request_list)
                                _list = []
                                for j in request_list:
                                    try:
                                        j = eval(
                                            j.replace("true", "True").replace(
                                                "false", "False"))
                                        try:
                                            _list.append(j["id"])
                                        except KeyError:
                                            pass
                                    except:
                                        return JsonResponse(
                                            code_msg=GlobalStatusCode.fail())
                                parameter = ApiParameter.objects.filter(
                                    api=api_id)
                                for n in parameter:
                                    if n.pk not in _list:
                                        n.delete()
                                for i in request_list:
                                    try:
                                        i = eval(
                                            i.replace("true", "True").replace(
                                                "false", "False"))
                                        if i['name']:
                                            try:
                                                ApiParameter.objects.filter(id=i['id'], api=api_id).\
                                                    update(name=i['name'], value=i['value'], required=i['required'],
                                                           restrict=i['restrict'], _type=i['_type'],
                                                           description=i['description'])
                                            except KeyError:
                                                ApiParameter(
                                                    api=ApiInfo.objects.get(
                                                        id=api_id),
                                                    name=i['name'],
                                                    value=i['value'],
                                                    required=i['required'],
                                                    _type=i['_type'],
                                                    description=i[
                                                        'description']).save()
                                    except Exception as e:
                                        logging.exception("Error")
                                        return JsonResponse(
                                            code_msg=GlobalStatusCode.fail())

                        else:
                            ApiParameterRaw.objects.filter(api=api_id).delete()
                            ApiParameter.objects.filter(api=api_id).delete()
                            if request_list:
                                ApiParameterRaw(
                                    api=ApiInfo.objects.get(id=api_id),
                                    data=request_list).save()

                        if response_list:
                            response_list = re.findall('{.*?}', response_list)
                            _list = []
                            for j in response_list:
                                try:
                                    j = eval(
                                        j.replace("true", "True").replace(
                                            "false", "False"))
                                    try:
                                        _list.append(j["id"])
                                    except KeyError:
                                        pass
                                except:
                                    return JsonResponse(
                                        code_msg=GlobalStatusCode.fail())
                            parameter = ApiResponse.objects.filter(api=api_id)
                            for n in parameter:
                                if n.pk not in _list:
                                    n.delete()
                            for i in response_list:
                                try:
                                    i = eval(
                                        i.replace("true", "True").replace(
                                            "false", "False"))
                                    if i['name']:
                                        try:
                                            ApiResponse.objects.filter(id=i['id'], api=api_id).\
                                                update(name=i['name'], value=i['value'], required=i['required'],
                                                       _type=i['_type'],
                                                       description=i['description'])
                                        except KeyError:
                                            ApiResponse(
                                                api=ApiInfo.objects.get(
                                                    id=api_id),
                                                name=i['name'],
                                                value=i['value'],
                                                required=i['required'],
                                                _type=i['_type'],
                                                description=i['description']
                                            ).save()
                                except Exception as e:
                                    logging.exception("error")
                                    return JsonResponse(
                                        code_msg=GlobalStatusCode.fail())
                            record_dynamic(project_id, '修改', '接口',
                                           '修改接口“%s”' % name)
                        api_record = ApiOperationHistory(
                            apiInfo=ApiInfo.objects.get(id=api_id),
                            user=User.objects.get(id=request.user.pk),
                            description='修改接口"%s"' % name)
                        api_record.save()
                        return JsonResponse(
                            code_msg=GlobalStatusCode.success())
                except Exception as e:
                    logging.exception('ERROR')
                    logging.error(e)
                    return JsonResponse(code_msg=GlobalStatusCode.fail())
            else:
                return JsonResponse(code_msg=GlobalStatusCode.api_is_exist())
        else:
            return JsonResponse(code_msg=GlobalStatusCode.api_not_exist())
    else:
        return JsonResponse(code_msg=GlobalStatusCode.project_not_exist())
def add_swagger_api(data, user):
    """
    swagger接口写入数据库
    :param data:  json数据
    :param user:  用户model
    :return:
    """
    try:
        obj = Project.objects.get(id=data["project_id"])
        try:
            with transaction.atomic():  # 执行错误后,帮助事物回滚
                serialize = ApiInfoDeserializer(data=data)
                if serialize.is_valid():
                    serialize.save(project=obj)
                    api_id = serialize.data.get("id")
                    if len(data.get("headDict")):
                        for i in data["headDict"]:
                            if i.get("name"):
                                i["api"] = api_id
                                head_serialize = ApiHeadDeserializer(data=i)
                                if head_serialize.is_valid():
                                    head_serialize.save(
                                        api=ApiInfo.objects.get(id=api_id))
                    if data["requestParameterType"] == "form-data":
                        if len(data.get("requestList")):
                            for i in data["requestList"]:
                                if i.get("name"):
                                    i["api"] = api_id
                                    param_serialize = ApiParameterDeserializer(
                                        data=i)
                                    if param_serialize.is_valid():
                                        param_serialize.save(
                                            api=ApiInfo.objects.get(id=api_id))
                    else:
                        if len(data.get("requestList")):
                            ApiParameterRaw(api=ApiInfo.objects.get(id=api_id),
                                            data=data["requestList"].replace(
                                                "'", "\"")).save()
                    if len(data.get("responseList")):
                        for i in data["responseList"]:
                            if i.get("name"):
                                i["api"] = api_id
                                response_serialize = ApiResponseDeserializer(
                                    data=i)
                                if response_serialize.is_valid():
                                    response_serialize.save(
                                        api=ApiInfo.objects.get(id=api_id))
                    record_dynamic(project=data["project_id"],
                                   _type="新增",
                                   operationObject="接口",
                                   user=user.pk,
                                   data="新增接口“%s”" % data["name"])
                    api_record = ApiOperationHistory(
                        api=ApiInfo.objects.get(id=api_id),
                        user=User.objects.get(id=user.pk),
                        description="新增接口“%s”" % data["name"])
                    api_record.save()
        except Exception as e:
            # logging.exception(e)
            return False
    except ObjectDoesNotExist:
        return False