graph.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. from django.db import models
  2. import os, errno
  3. from datetime import datetime
  4. from random import randint
  5. from api.utils import *
  6. graphForAlgo = [
  7. ('optimize', 'optimize'),
  8. ('group', 'group'),
  9. ('predict', 'predict'),
  10. ]
  11. class GraphManager(models.Manager):
  12. def checkDuplicate(self, token):
  13. try:
  14. self.get(tokne=token)
  15. return True
  16. except GraphToken.DoesNotExist:
  17. return False
  18. return True
  19. class GraphToken(models.Model):
  20. # 用于访问图的验证码
  21. create_time = models.DateTimeField(auto_now_add=True)
  22. graph = models.ForeignKey(to="api.Graph", on_delete=models.CASCADE, related_name="own_tokens")
  23. token = models.CharField(max_length=8)
  24. objects = GraphManager()
  25. def checkExpire(self):
  26. now = datetime.now()
  27. diff = now - self.create_time
  28. if diff.days != 0 or diff.hours != 0 or diff.mins > 5:
  29. # 5分钟凭证过期
  30. return False
  31. else:
  32. return True
  33. class GraphManager(models.Manager):
  34. def statistic(self, user):
  35. graphs = user.own_graphs.all()
  36. return {
  37. 'amount': len(graphs),
  38. }
  39. class Graph(models.Model):
  40. create_time = models.DateTimeField(auto_now_add=True)
  41. update_time = models.DateTimeField(auto_now=True)
  42. type = models.CharField(choices=graphForAlgo, default='optimize', max_length=16)
  43. # 根据算法不同,生成的图数据结构不同
  44. nodesMap = models.JSONField()
  45. edgeMap = models.JSONField()
  46. result = models.ForeignKey(to="api.Results", on_delete=models.CASCADE, related_name="own_graphs")
  47. user = models.ForeignKey(to="api.User", on_delete=models.CASCADE, related_name="own_graphs")
  48. objects = GraphManager()
  49. def generateToken(self):
  50. # 生成验证码
  51. token = GraphToken()
  52. token.graph = self
  53. token.token = ''.join([str(randint(0,9)) for n in range(6)])
  54. while(GraphToken.objects.checkDuplicate(token.token)){
  55. token.token = ''.join([str(randint(0,9)) for n in range(6)])
  56. }
  57. class Meta:
  58. app_label = 'api'