from django.contrib import auth from rest_framework.views import APIView from rest_framework.response import Response from rest_framework import status from rest_framework.authtoken.models import Token from rest_framework.authentication import BasicAuthentication, TokenAuthentication from .serializers import UserRegisterSerializer from django.middleware.csrf import get_token from django.contrib.auth import login from api.utils import * from api.models import File, Mission, Plan, Result import requests import json, csv PLAN_FAILED = -1 MISSION_FAILED = -2 class RawDataTrans(APIView): authentication_classes = [] permission_classes = [] def get(self, request): if request.user: # 用户从前端发来请求 return success("测试返回图数据") else: # 进程管理器发来请求 # mission = Mission.objects.get(id=int(request.data.get('missionId'))) plan = Plan.objects.get(id=int(request.data.get('planId'))) return success("测试返回图数据") def post(self, request): # 处理进程反馈计算结果 mission = Mission.objects.get(id=int(request.data.get('missionId'))) plan = Plan.objects.get(id=int(request.data.get('planId'))) nodes = request.data.get('nodes') edges = request.data.get('edges') progress = request.data.get('progress') print(request.data) print(mission, plan, progress) for param in [mission, plan, progress]: if param is None: print("结果传递参数不足") return failed(message="缺少结果参数") if int(progress) == 100: if not nodes or not edges: print("进度完成却没有返回结果数据") return failed(message="缺少结果参数") try: result = plan.own_result if int(progress) == 100: # 任务完成后需要保存结果文件 # 读取nodes和edges,生成结果文件 nodeFile = File(type='csv', usage='result', content='node', user=plan.user) nodeFile.save() if not nodeFile.generate(nodes) == OK: print("保存节点结果文件失败") return failed(message="保存节点结果文件失败") edgeFile = File(type='csv', usage='result', content='edge', user=plan.user) edgeFile.save() if not edgeFile.generate(edges) == OK: print("保存边结果文件失败") return failed(message="保存边结果文件失败") nodeFile.associate = edgeFile edgeFile.associate = nodeFile nodeFile.save() edgeFile.save() # 将文件与结果绑定 result.nodeFile = nodeFile result.edgeFile = edgeFile result.progress = 100 result.save() else: # 进度不到百分百,正在执行中,仅更新进度数值 # 注意使用负数进度值表示单个处理失败或整个任务失败 result.progress = int(progress) result.save() return success(message="保存结果文件成功") except Result.DoesNotExist: # 不存在结果文件,需要新建 result = Result() result.plan = plan result.mission = mission result.user = plan.user result.progress = int(progress) result.save() return success(message="保存结果文件成功")