projectlistview.py 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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. import logging
  7. from PrivacyRetrieval.settings import PROJECT_ROOT, HTTP_HEAD
  8. from apps.project.models import RetrievalProject
  9. logger = logging.getLogger('django')
  10. class ProjectListView(APIView):
  11. # create retrievalProject
  12. @staticmethod
  13. def post(request, *args, **kwargs):
  14. title = request.POST.get('title')
  15. project_type = request.POST.get('type')
  16. file = request.FILES.get('project')
  17. if not title:
  18. logger.error("项目名称不能为空")
  19. return HttpResponse(status=500, content='项目名称不能为空')
  20. if not project_type:
  21. logger.error("项目类型不能为空")
  22. return HttpResponse(status=500, content='项目类型不能为空')
  23. if not file:
  24. logger.error("项目上传失败")
  25. return HttpResponse(status=500, content='项目上传失败')
  26. create_time = update_time = datetime.datetime.now()
  27. if not RetrievalProject.objects.last():
  28. id_ = 1
  29. else:
  30. id_ = RetrievalProject.objects.order_by('id').last().id + 1
  31. file_dir = PROJECT_ROOT + str(id_) + "/" + str(create_time)
  32. if not os.path.exists(file_dir):
  33. os.makedirs(file_dir)
  34. file_path = file_dir + "/" + file.name
  35. with open(file_path, 'wb') as f:
  36. f.write(file.read())
  37. f.close()
  38. project = RetrievalProject.objects.create(title=title, type=project_type, project_file=file_path,
  39. create_time=create_time, update_time=update_time)
  40. return Response({
  41. 'id': project.id,
  42. 'title': project.title,
  43. 'type': project.type,
  44. 'project_name': file.name,
  45. 'project_url': HTTP_HEAD + project.project_file,
  46. 'create_time': create_time,
  47. 'update_time': update_time
  48. })
  49. # get project list
  50. @staticmethod
  51. def get(request, *args, **kwargs):
  52. title = request.GET.get('title')
  53. project_type = request.GET.get('type')
  54. sort = request.GET.get('sort')
  55. project_all = RetrievalProject.objects.order_by('id').filter(delete=False)
  56. if title:
  57. project_all = project_all.filter(title__contains=title)
  58. if project_type:
  59. project_all = project_all.filter(type__contains=project_type)
  60. if sort:
  61. project_all = project_all.order_by(sort)
  62. if not project_all:
  63. return Response([])
  64. info = []
  65. for project in project_all.all():
  66. info.append({
  67. 'id':project.id,
  68. 'title': project.title,
  69. 'type': project.type,
  70. 'create_time': project.create_time,
  71. 'update_time': project.update_time
  72. })
  73. return Response(info)