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'