def projects(request): """Get a list of all projects with embedded scenarios available for the logged in user. POST to create a new project associated with the logged in user.""" if request.method == 'GET': projects = Project.objects.filter(user=request.user) serializer = ProjectListingSerializer(projects, many=True) return Response(serializer.data) elif request.method == 'POST': serializer = ProjectUpdateSerializer(data=request.data, context={"request": request}) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def project(request, proj_id): """Retrieve, update or delete a project""" project = get_object_or_404(Project, id=proj_id) if request.method == 'GET': if project.user.id != request.user.id and project.is_private: return Response(status=status.HTTP_404_NOT_FOUND) serializer = ProjectSerializer(project) return Response(serializer.data) elif project.user.id == request.user.id: if request.method == 'PUT': ctx = {'request': request} serializer = ProjectUpdateSerializer(project, data=request.data, context=ctx) if serializer.is_valid(): serializer.save() return Response(serializer.data) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) elif request.method == 'PATCH': ctx = {'request': request} serializer = ProjectListingSerializer(project, data=request.data, context=ctx) if serializer.is_valid(): serializer.save() return Response(serializer.data) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) elif request.method == 'DELETE': project.delete() return Response(status=status.HTTP_204_NO_CONTENT) else: return Response(status=status.HTTP_404_NOT_FOUND)