import datetime import os from django.http import HttpResponse from rest_framework.response import Response from rest_framework.views import APIView from PrivacyRetrieval.settings import PROJECT_ROOT, HTTP_HEAD from apps.project.models import RetrievalProject import logging logger = logging.getLogger('django') class ProjectView(APIView): # get detail of project @staticmethod def get(request, project_id, *args, **kwargs): project = RetrievalProject.objects.filter(id=project_id, delete=False) if not project: logger.error("项目已删除或不存在") return HttpResponse(status=500, content='项目已删除或不存在') project = project[0] task_set = project.retrievaltask_set.filter(delete=False) task_info = [] if task_set: for task in task_set: task_info.append({ 'id': task.id, 'title': task.title, 'type': task.type, 'state': task.state, 'description': task.description }) return Response({ 'id': project.id, 'title': project.title, 'type': project.type, 'project_name': project.project_file.split('/')[-1], 'project_url': HTTP_HEAD + project.project_file, 'task_info': task_info }) # edit project @staticmethod def put(request, project_id, *args, **kwargs): title = request.POST.get('title') project_type = request.POST.get('type') file = request.FILES.get('project') project = RetrievalProject.objects.filter(id=project_id, delete=False) if not project: logger.error("项目已删除或不存在") return HttpResponse(status=500, content='项目已删除或不存在') project = project[0] if not title: logger.error("项目名称不能为空") return HttpResponse(status=500, content='项目名称不能为空') if not project_type: logger.error("项目类型不能为空") return HttpResponse(status=500, content='项目类型不能为空') update_time = datetime.datetime.now() if file: file_dir = PROJECT_ROOT + str(project.id) + "/" + str(update_time) if not os.path.exists(file_dir): os.makedirs(file_dir) file_path = file_dir + "/" + file.name with open(file_path, 'wb') as f: f.write(file.read()) f.close() project.project_file = file_path project.save() project.title = title project.type = project_type project.update_time = update_time project.save() return HttpResponse(status=200, content='编辑已保存') # delete project @staticmethod def delete(request, project_id, *args, **kwargs): project = RetrievalProject.objects.filter(id=project_id, delete=False) if not project: logger.error("项目已删除或不存在") return HttpResponse(status=500, content='项目已删除或不存在') project = project[0] project.delete = True project.save() task_set = project.retrievaltask_set.filter(delete=False) if task_set: for task in task_set: task.delete = True task.save() return HttpResponse(status=200, content='项目已删除')