Example #1
0
def api_getlist(request, endpoint):
    """
    Method name is now misleading as inserts and updates can now be performed.

    Variable 'recordsTotal' handled by api_getcount().

    :param request:
    :param endpoint: Django model name (case sensitive)
    :return:
    """
    model = endpoint
    return_as = request.GET.get('return_as', 'json')

    if request.method == 'GET':
        model_serializer = GetData(request, model)
        """
        if not model_serializer.verify_user():
            return JSONResponse(
                {
                    "response": 403,
                    "msg": "Permission denied"
                }
            )
        """

        objects, fatal_error = model_serializer.get_objects()

        if not fatal_error:
            serialized = model_serializer.serialize_model()(objects,
                                                            many=True,
                                                            context={
                                                                'request':
                                                                request
                                                            })
            response = model_serializer.response(serialized)
        else:
            response = {
                'data': 0,
                'recordsTotal': 0,
                'recordsFiltered': 0,
                'recordsDisplayed': 0,
                'draw': 0,
                'error': fatal_error
            }

        if return_as == 'csv':
            filename = "Download"
            renderer = CSVStreamingRenderer()
            response = StreamingHttpResponse(renderer.render(
                response.get('data')),
                                             content_type='text/csv')
            response[
                'Content-Disposition'] = 'attachment; filename="{0}.csv"'.format(
                    filename)

            return response
        else:
            return JSONResponse(response)

    elif request.method == 'PUT':
        model_serializer = PutObject(request, model)
        if not model_serializer.verify_user():
            return JSONResponse({"response": 403, "msg": "Permission denied"})

        try:
            model_serializer.get_object(request.data.get('id'))
        except:
            return JSONResponse({
                "response": 400,
                "msg": "Requested object was not found"
            })

        serializer = model_serializer.serialize_model()(
            model_serializer.object, data=request.data, partial=True)
        if serializer.is_valid():
            serializer.save()

            return JSONResponse({
                "response": 200,
                "msg": "{0} object saved".format(endpoint)
            })

        return JSONResponse({
            "response": 400,
            "errors": serializer.errors,
            "msg": "{0} object was not saved".format(endpoint)
        })

    elif request.method == 'POST':
        model_serializer = PostObject(request, model)
        if not model_serializer.verify_user():
            return JSONResponse({"response": 403, "msg": "Permission denied"})

        serializer = model_serializer.serialize_model()(data=request.data)
        if serializer.is_valid():
            serializer.save()

            return JSONResponse({
                "response": 200,
                "msg": "{0} object created".format(endpoint)
            })

        return JSONResponse({
            "response":
            400,
            "errors":
            serializer.errors,
            "msg":
            "{0} object was not created".format(endpoint)
        })