def get(self, request):
     """
     接口分组
     :param request:
     :return:
     """
     project_id = request.GET.get("project_id")
     # 校验参数
     if not project_id:
         return JsonResponse(code="999996", msg="参数有误!")
     if not project_id.isdecimal():
         return JsonResponse(code="999996", msg="参数有误!")
     # 验证项目是否存在
     try:
         pro_data = Project.objects.get(id=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="该项目已禁用")
     # 查找项目下所有接口信息,并按id排序,序列化结果
     obi = ApiGroupLevelFirst.objects.filter(project=project_id).order_by("id")
     serialize = ApiGroupLevelFirstSerializer(obi, many=True)
     return JsonResponse(data=serialize.data, code="999999", msg="成功!")
示例#2
0
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())
示例#3
0
 def get(self, request):
     """
     接口分组
     :param request:
     :return:
     """
     project_id = request.GET.get("project_id")
     if not project_id:
         return JsonResponse(code="999996", msg="参数有误!")
     if not project_id.isdecimal():
         return JsonResponse(code="999996", msg="参数有误!")
     try:
         pro_data = Project.objects.get(id=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="该项目已禁用")
     obi = ApiGroupLevelFirst.objects.filter(
         project=project_id).order_by("id")
     serialize = ApiGroupLevelFirstSerializer(obi, many=True)
     return JsonResponse(data=serialize.data, code="999999", msg="成功!")
def swagger_api(url, project, user):
    """
    请求swagger地址,数据解析
    :param url: swagger地址
    :param project: 项目ID
    :param user: 用户model
    :return:
    """
    req = requests.get(url)
    data = req.json()
    apis = data["paths"]
    tags = data["tags"]
    try:
        params = data["definitions"]
    except KeyError:
        pass
    tg = {}
    obj = Project.objects.get(id=project)
    for t in tags:
        tag ={"name" : t["name"],"project_id" : project}
        group_serialize = ApiGroupLevelFirstSerializer(data=tag)
        if group_serialize.is_valid():
            group_serialize.save(project=obj)
            group_id = group_serialize.data.get("id")
            tg.update({t["name"] : group_id})
    for api, m in apis.items():
        requestApi = {
            "project_id": project, "status": True, "mockStatus": True, "code": "", "desc": "",
            "httpType": "HTTP", "responseList": []
        }
        requestApi["apiAddress"] = api
        for requestType, data in m.items():
            requestApi["requestType"] = requestType.upper()
            if "tags" in data:
                logging.error("tags")
                logging.error(tg[data["tags"][0]])
                requestApi["apiGroupLevelFirst_id"] = tg[data["tags"][0]]
            try:
                requestApi["name"] = data["summary"]
            except KeyError:
                logging.error("43")
                pass
            try:
                if data["consumes"][0] == "application/json":
                    requestApi["requestParameterType"] = "form-data"
                else:
                    requestApi["requestParameterType"] = "form-data"
                requestApi["headDict"] = [{"name": "Content-Type", "value": data["consumes"][0]}]
            except KeyError:
                logging.error("52")
                requestApi["requestParameterType"] = "raw"
            if "parameters" in data:
                parameter = []
                for j in data["parameters"]:
                    if j["in"] == "header":
                        logging.error("header57")
                        requestApi["headDict"].append({"name": j["name"], "value": "String"})
                    elif j["in"] == "body":
                        dto = j["name"]
                        logging.error("dto——body " + dto)
                        try:
                            if "description" in j:
                                parameter.append({"name": dto, "value": "", "_type": j["type"],"required": j["required"], "restrict": "", "description": j["description"]})
                            else:
                                parameter.append({"name": dto, "value": "", "_type": j["type"],"required": j["required"], "restrict": "", "description": ""})
                        except:
                            logging.error("body71")
                            pass
                    elif j["in"] == "query":
                        dto = j["name"]
                        logging.error("dto——query " + dto)
                        try:
                            if "description" in j:
                                parameter.append({"name": dto, "value": "", "_type": j["type"],"required": j["required"], "restrict": "", "description": j["description"]})
                            else:
                                parameter.append({"name": dto, "value": "", "_type": j["type"],"required": j["required"], "restrict": "", "description": ""})
                        except:
                            logging.error("query84")
                            pass
                requestApi["requestList"] = parameter
            if "responses" in data:
                response = []
                if "schema" in data["responses"]["200"]:
                    ref = data["responses"]["200"]["schema"]["$ref"]
                    dto = ref.split("/")[2]
                    for key, value in params[dto]["properties"].items():
                        if "description" in value and "type" in value:
                            response.append({"name": key, "value": value["description"], "_type": value["type"],"required": True, "description": value["description"]})
                        else:
                            response.append({"name": key, "value": "", "_type": "String","required": True, "description": ""})
                        if "items" in value:
                            if "$ref" in value["items"]:
                                ref1 = value["items"]["$ref"]
                                dto1 = ref1.split("/")[2]
                                logging.error("dto1 "+dto1)
                                for key1, value1 in params[dto1]["properties"].items():
                                    logging.error("key1 "+key1)
                                    if "description" in value1 and "type" in value1:
                                        response.append({"name": key + "." + key1, "value": value1["description"], "_type": value1["type"],"required": True, "description": value1["description"]})
                                    else:
                                        response.append({"name": key + "." + key1, "value": "", "_type": "String","required": True, "description": ""})
                                    if "items" in value1:
                                        ref2 = value1["items"]["$ref"]
                                        dto2 = ref2.split("/")[2]
                                        logging.error("dto2 "+dto2)
                                        for key2, value2 in params[dto2]["properties"].items():
                                            logging.error("key2 "+key2)
                                            if "description" in value2 and "type" in value2:
                                                response.append({"name":  key + "." +  key1 + "." + key2, "value": value2["description"], "_type": value2["type"],"required": True, "description": value2["description"]})
                                            else:
                                                response.append({"name":  key + "." +  key1 + "." + key2, "value": "", "_type": "String","required": True, "description": ""})
                requestApi["responseList"] = response
        requestApi["userUpdate"] = user.id
        result = add_swagger_api(requestApi, user)