Lan преди 1 месец
родител
ревизия
a8a6814767
променени са 4 файла, в които са добавени 98 реда и са изтрити 0 реда
  1. BIN
      backend/api/__pycache__/api_rawDataTrans.cpython-310.pyc
  2. 19 0
      backend/api/api_graph.py
  3. 3 0
      backend/api/api_rawDataTrans.py
  4. 76 0
      backend/api/models/graph.py

BIN
backend/api/__pycache__/api_rawDataTrans.cpython-310.pyc


+ 19 - 0
backend/api/api_graph.py

@@ -0,0 +1,19 @@
+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 json, csv
+
+class ViewGraph(APIView):
+    authentication_classes = []
+    permission_classes = []

+ 3 - 0
backend/api/api_rawDataTrans.py

@@ -28,7 +28,9 @@ class RawDataTrans(APIView):
             # 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')
@@ -69,6 +71,7 @@ class RawDataTrans(APIView):
                 result.edgeFile = edgeFile
                 result.progress = 100
                 result.save()
+
             else:
                 # 进度不到百分百,正在执行中,仅更新进度数值
                 result.progress = int(progress)

+ 76 - 0
backend/api/models/graph.py

@@ -0,0 +1,76 @@
+from django.db import models
+import os, errno
+from datetime import datetime
+from random import randint
+
+from api.utils import *
+graphForAlgo = [
+    ('optimize', 'optimize'),
+    ('group', 'group'),
+    ('predict', 'predict'),
+]
+
+
+class GraphManager(models.Manager):
+    def checkDuplicate(self, token):
+        try:
+            self.get(tokne=token)
+            return True
+        except GraphToken.DoesNotExist:
+            return False
+        return True
+
+
+class GraphToken(models.Model):
+    # 用于访问图的验证码
+    create_time = models.DateTimeField(auto_now_add=True)
+
+    graph = models.ForeignKey(to="api.Graph", on_delete=models.CASCADE, related_name="own_tokens")
+    token = models.CharField(max_length=8)
+
+    objects = GraphManager()
+
+    def checkExpire(self):
+        now = datetime.now()
+        diff = now - self.create_time
+        if diff.days != 0 or diff.hours != 0 or diff.mins > 5:
+            # 5分钟凭证过期
+            return False
+        else:
+            return True
+
+class GraphManager(models.Manager):
+    def statistic(self, user):
+      graphs = user.own_graphs.all()
+      return {
+          'amount': len(graphs),
+      }
+
+class Graph(models.Model):
+    create_time = models.DateTimeField(auto_now_add=True)
+    update_time = models.DateTimeField(auto_now=True)
+
+    type = models.CharField(choices=graphForAlgo, default='optimize', max_length=16)
+    # 根据算法不同,生成的图数据结构不同
+    nodesMap = models.JSONField()
+    edgeMap = models.JSONField()
+
+    result = models.ForeignKey(to="api.Results", on_delete=models.CASCADE, related_name="own_graphs")
+    user = models.ForeignKey(to="api.User", on_delete=models.CASCADE, related_name="own_graphs")
+
+
+    objects = GraphManager()
+
+    def generateToken(self):
+        # 生成验证码
+        token = GraphToken()
+        token.graph = self
+        token.token = ''.join([str(randint(0,9)) for n in range(6)])
+        while(GraphToken.objects.checkDuplicate(token.token)){
+            token.token = ''.join([str(randint(0,9)) for n in range(6)])
+        }
+
+    class Meta:
+        app_label = 'api'
+
+