|
@@ -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'
|
|
|
|
+
|
|
|
|
+
|