예제 #1
0
 def get(self, *args, **kwargs):
     product_id = kwargs.get('product_id')
     #product_id may not come in the kwargs
     if product_id:
         product = self._get_object(product_id)
         # got a product_id but we dont know what it is
         if not product:
             return JsonResponse(
                 {
                     "success":
                     False,
                     "msg":
                     "Could not find product with id: {}".format(product_id)
                 },
                 status=404)
         # got a product_id that we matched to a product. We put into json format with the serializer
         data = serialize_product_as_json(product)
     # we did not get a kwargs key for 'product_id'. we just got a GET request.
     # we are going to send back all the products that we have in a list of json objects.
     else:
         # list
         qs = Product.objects.all()
         #       using the serializer for each product in our db.
         data = [serialize_product_as_json(product) for product in qs]
     return JsonResponse(data, status=200, safe=False)
예제 #2
0
    def get(self, *args, **kwargs):
        data = None

        product_id = kwargs.get('product_id')
        if product_id:
            product = get_object_or_404(Product, id=product_id)
            data = serialize_product_as_json(product)
        else:
            products = get_list_or_404(Product)
            data = [serialize_product_as_json(product) for product in products]

        return JsonResponse(data, status=200, safe=False)
예제 #3
0
 def get(self, *args, **kwargs):
     product_id = kwargs.get('product_id')
     if product_id:
         # detail
         product = self._get_object(product_id)
         if not product:
             return JsonResponse(
                 {"success": False, "msg": "Could not find product with id: {}".format(product_id)},
                 status=404)
         data = serialize_product_as_json(product)
     else:
         # list
         qs = Product.objects.all()
         data = [serialize_product_as_json(product) for product in qs]
     return JsonResponse(data, status=200, safe=False)
예제 #4
0
 def post(self, *args, **kwargs):
     data = json.loads(self.request.body)
     category_id = data.get('category', None)
     category = get_object_or_404(Category, id=category_id)
     product = Product.objects.create(name=data.get('name'),
                                      sku=data.get('sku'),
                                      category=category,
                                      description=data.get('description'),
                                      price=data.get('price'))
     data = serialize_product_as_json(product)
     return JsonResponse(data, status=201, safe=False)
예제 #5
0
    def patch(self, *args, **kwargs):
        product = Product.objects.get(id=self.kwargs['prod_id'])
        if product:
            #get input payload
            try:
                payload = json.loads(self.request.body)
            except ValueError:
                return JsonResponse(
                    {
                        "success": False,
                        "msg": "Provide a valid JSON payload"
                    },
                    status=400)
            for field in [
                    'name', 'category', 'sku', 'description', 'price',
                    'featured'
            ]:
                if field in payload:

                    if field == 'category':
                        try:
                            payload['category'] = Category.objects.get(
                                id=payload['category'])
                        except Category.DoesNotExist:
                            return JsonResponse(
                                {
                                    "success":
                                    False,
                                    "msg":
                                    "Could not find planet with id: {}".format(
                                        payload['category'])
                                },
                                status=404)
                    try:
                        setattr(product, field, payload[field])
                        product.save()
                    except ValueError:
                        return JsonResponse(
                            {
                                "success": False,
                                "msg": "Provided payload is not valid"
                            },
                            status=400)
                    data = serialize_product_as_json(product)
                return JsonResponse(data, status=200, safe=False)
        else:
            return JsonResponse(
                {
                    "success": False,
                    "msg":
                    "Could not find product with id: {}".format(product_id)
                },
                status=404)
예제 #6
0
 def get(self, *args, **kwargs):
     #Return the request object formatted into JSON
     id_passed = kwargs.get('prod_id')
     if id_passed:
         product = Product.objects.get(id=self.kwargs['prod_id'])
         if product:
             json_product = serialize_product_as_json(product)
             return JsonResponse(json_product)
         else:
             return JsonResponse(
                 {
                     "success": False,
                     "msg":
                     "Could not find product with id: {}".format(product)
                 },
                 status=404)
     #Return all objects formatted into JSON
     else:
         products = Product.objects.all()
         product_list = [
             serialize_product_as_json(product) for product in products
         ]
         return JsonResponse(product_list, safe=False)
예제 #7
0
    def post(self, *args, **kwargs):
        # create
        if 'product_id' in kwargs:
            return JsonResponse(
                {
                    "success": False,
                    "msg": "Invalid HTTP method"
                }, status=400)

        try:
            payload = json.loads(self.request.body.decode('utf-8'))
        except ValueError:
            return JsonResponse(
                {
                    "success": False,
                    "msg": "Provide a valid JSON payload"
                },
                status=400)
        # THIS BLOCK might need to be implemented to include a Category?
        # when creating a new procuct we need to know the category id to link it to an
        # existing category. If we don't get a category id we return an error message.
        category_id = payload.get('category', None)
        try:
            category = Category.objects.get(id=category_id)
        except Category.DoesNotExist:
            return JsonResponse(
                {
                    "success":
                    False,
                    "msg":
                    "Could not find category with id: {}".format(category_id)
                },
                status=404)
        # THIS BLOCK
        try:
            product = Product.objects.create(
                name=payload['name'],
                sku=payload['sku'],
                category=category,
                description=payload['description'],
                price=payload['price'])
        except (ValueError, KeyError):
            return JsonResponse(
                {
                    "success": False,
                    "msg": "Provided payload is not valid"
                },
                status=400)
        data = serialize_product_as_json(product)
        return JsonResponse(data, status=201, safe=False)
예제 #8
0
 def post(self, *args, **kwargs):
     try:         
         payload = json.loads(self.request.body)
     except ValueError:
         return JsonResponse({"success": False, "msg":"Provide a valid JSON payload"}, status=400)
     category_id = payload.get('category', None)
     try:
         category=Category.objects.get(id=category_id)
     except Category.DoesNotExist:
         return JsonResponse({"success": False, "msg":"that category ain't right"}, status=400)
     try: 
         product=Product.objects.create(name=payload['name'],category=category,sku=payload['sku'],description=payload['description'], price=payload['price'],)
     except (ValueError, KeyError):
         return JsonResponse({"success": False, "msg": "Provided payload ain't right"},status=400)
     data = serialize_product_as_json(product)
     return JsonResponse(data, status=201, safe=False)
예제 #9
0
    def post(self, *args, **kwargs):
        try:
            #payload = json.loads(self.request.body)
            payload = json.loads(self.request.body.decode('utf-8'))
        except ValueError:
            return JsonResponse(
                {
                    "success": False,
                    "msg": "Provide a valid JSON payload"
                },
                status=400)

        # tries to find category in the JSON payload, if it doesn't exist it defaults to None
        category_id = payload.get('category', None)

        #CODE BELOW is getting the object by it's ID in the database (an int)

        #we're just assiging it to that Category model
        try:
            category = Category.objects.get(id=category_id)
        except Category.DoesNotExist:
            return JsonResponse(
                {
                    "success":
                    False,
                    "msg":
                    "Could not find category with id: {}".format(category_id)
                },
                status=404)

        try:
            product = Product.objects.create(
                name=payload['name'],
                category=category,
                sku=payload['sku'],
                description=payload['description'],
                price=payload['price'],
            )
        except (ValueError, KeyError):
            return JsonResponse(
                {
                    "success": False,
                    "msg": "Provided payload is not valid"
                },
                status=400)
        data = serialize_product_as_json(product)
        return JsonResponse(data, status=201, safe=False)
예제 #10
0
    def post(self, *args, **kwargs):
        #try to get json payload
        try:
            payload = json.loads(self.request.body)
        except ValueError:
            return JsonResponse(
                {
                    "success": False,
                    "msg": "Provide a valid JSON payload"
                },
                status=400)
        try:
            category_id = payload.get('category', None)
            category = Category.objects.get(id=category_id)

        except Category.DoesNotExist:
            return JsonResponse(
                {
                    "success": False,
                    "msg":
                    "Could not find category with id: {}".format(category)
                },
                status=404)
        try:
            product = Product.objects.create(
                category=category,
                name=payload['name'],
                sku=payload['sku'],
                description=payload['description'],
                price=payload['price'],
                featured=payload.get('featured', False))

        except (ValueError, KeyError):
            return JsonResponse(
                {
                    "success": False,
                    "msg":
                    "Provided info isn't valid, please fill in all details"
                },
                status=400)
        product.save()
        ret_prod = serialize_product_as_json(product)
        return JsonResponse(ret_prod, status=201)
예제 #11
0
    def _update(self, product, payload, partial=False):
        for field in [
                'name', 'sku', 'category', 'description', 'price', 'featured'
        ]:
            if not field in payload:
                if partial:
                    continue
                return JsonResponse(
                    {
                        "success": False,
                        "msg": "Missing field in full update"
                    },
                    status=400)
            # category
            if field == 'category':

                try:
                    payload['category'] = Category.objects.get(
                        id=payload['category'])
                except Category.DoesNotExist:
                    return JsonResponse(
                        {
                            "success":
                            False,
                            "msg":
                            "Could not find category with id: {}".format(
                                category_id)
                        },
                        status=404)

            try:  #product is an instance of product set within the function#
                setattr(product, field, payload[field])
                product.save()
            except ValueError:
                return JsonResponse(
                    {
                        "success": False,
                        "msg": "Provided payload is not valid"
                    },
                    status=400)
        data = serialize_product_as_json(product)
        return JsonResponse(data, status=200, safe=False)
예제 #12
0
    def put(self, *args, **kwargs):
        product_id = kwargs.get('product_id')
        product = get_object_or_404(Product, id=product_id)
        data = json.loads(self.request.body)

        for field in [
                'name', 'category', 'sku', 'description', 'price', 'featured'
        ]:
            if not field in data:
                return JsonResponse({'success': False}, status=404)

            if field == 'category':
                data['category'] = get_object_or_404(Category,
                                                     id=data.get('category'))

            setattr(product, field, data[field])
            product.save()

        data = serialize_product_as_json(product)
        return JsonResponse(data, status=200, safe=False)