import datetime import os from django.http import HttpResponse from rest_framework.response import Response from rest_framework.views import APIView import logging from PrivacyRetrieval.settings import PROJECT_ROOT, HTTP_HEAD from apps.project.models import RetrievalProject logger = logging.getLogger('django') class ProjectListView(APIView): # create retrievalProject @staticmethod def post(request, *args, **kwargs): title = request.POST.get('title') project_type = request.POST.get('type') file = request.FILES.get('project') if not title: logger.error("项目名称不能为空") return HttpResponse(status=500, content='项目名称不能为空') if not project_type: logger.error("项目类型不能为空") return HttpResponse(status=500, content='项目类型不能为空') if not file: logger.error("项目上传失败") return HttpResponse(status=500, content='项目上传失败') create_time = update_time = datetime.datetime.now() if not RetrievalProject.objects.last(): id_ = 1 else: id_ = RetrievalProject.objects.order_by('id').last().id + 1 file_dir = PROJECT_ROOT + str(id_) + "/" + str(create_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 = RetrievalProject.objects.create(title=title, type=project_type, project_file=file_path, create_time=create_time, update_time=update_time) return Response({ 'id': project.id, 'title': project.title, 'type': project.type, 'project_name': file.name, 'project_url': HTTP_HEAD + project.project_file, 'create_time': create_time, 'update_time': update_time }) # get project list @staticmethod def get(request, *args, **kwargs): title = request.GET.get('title') project_type = request.GET.get('type') sort = request.GET.get('sort') project_all = RetrievalProject.objects.order_by('id').filter(delete=False) if title: project_all = project_all.filter(title__contains=title) if project_type: project_all = project_all.filter(type__contains=project_type) if sort: project_all = project_all.order_by(sort) if not project_all: return Response([]) info = [] for project in project_all.all(): info.append({ 'id':project.id, 'title': project.title, 'type': project.type, 'create_time': project.create_time, 'update_time': project.update_time }) return Response(info)