projectview.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import datetime
  2. import os
  3. from django.http import HttpResponse
  4. from rest_framework.response import Response
  5. from rest_framework.views import APIView
  6. from PrivacyRetrieval.settings import PROJECT_ROOT, HTTP_HEAD
  7. from apps.project.models import RetrievalProject
  8. import logging
  9. logger = logging.getLogger('django')
  10. class ProjectView(APIView):
  11. # get detail of project
  12. @staticmethod
  13. def get(request, project_id, *args, **kwargs):
  14. project = RetrievalProject.objects.filter(id=project_id, delete=False)
  15. if not project:
  16. logger.error("项目已删除或不存在")
  17. return HttpResponse(status=500, content='项目已删除或不存在')
  18. project = project[0]
  19. task_set = project.retrievaltask_set.filter(delete=False)
  20. task_info = []
  21. if task_set:
  22. for task in task_set:
  23. task_info.append({
  24. 'id': task.id,
  25. 'title': task.title,
  26. 'type': task.type,
  27. 'state': task.state,
  28. 'description': task.description
  29. })
  30. return Response({
  31. 'id': project.id,
  32. 'title': project.title,
  33. 'type': project.type,
  34. 'project_name': project.project_file.split('/')[-1],
  35. 'project_url': HTTP_HEAD + project.project_file,
  36. 'task_info': task_info
  37. })
  38. # edit project
  39. @staticmethod
  40. def put(request, project_id, *args, **kwargs):
  41. title = request.POST.get('title')
  42. project_type = request.POST.get('type')
  43. file = request.FILES.get('project')
  44. project = RetrievalProject.objects.filter(id=project_id, delete=False)
  45. if not project:
  46. logger.error("项目已删除或不存在")
  47. return HttpResponse(status=500, content='项目已删除或不存在')
  48. project = project[0]
  49. if not title:
  50. logger.error("项目名称不能为空")
  51. return HttpResponse(status=500, content='项目名称不能为空')
  52. if not project_type:
  53. logger.error("项目类型不能为空")
  54. return HttpResponse(status=500, content='项目类型不能为空')
  55. update_time = datetime.datetime.now()
  56. if file:
  57. file_dir = PROJECT_ROOT + str(project.id) + "/" + str(update_time)
  58. if not os.path.exists(file_dir):
  59. os.makedirs(file_dir)
  60. file_path = file_dir + "/" + file.name
  61. with open(file_path, 'wb') as f:
  62. f.write(file.read())
  63. f.close()
  64. project.project_file = file_path
  65. project.save()
  66. project.title = title
  67. project.type = project_type
  68. project.update_time = update_time
  69. project.save()
  70. return HttpResponse(status=200, content='编辑已保存')
  71. # delete project
  72. @staticmethod
  73. def delete(request, project_id, *args, **kwargs):
  74. project = RetrievalProject.objects.filter(id=project_id, delete=False)
  75. if not project:
  76. logger.error("项目已删除或不存在")
  77. return HttpResponse(status=500, content='项目已删除或不存在')
  78. project = project[0]
  79. project.delete = True
  80. project.save()
  81. task_set = project.retrievaltask_set.filter(delete=False)
  82. if task_set:
  83. for task in task_set:
  84. task.delete = True
  85. task.save()
  86. return HttpResponse(status=200, content='项目已删除')