Custom-DRF-Response

528 views
Skip to first unread message

Ronaldo Mata

unread,
Jul 3, 2020, 5:54:15 PM7/3/20
to django...@googlegroups.com
Hi Guys

Somebody can help me?

I want to create a custom response with the follow format:

{
  "status": true,
  "message": "Any message",
  "data": []
}

but I don't want create a custom_response function because I must to modified all Api class based views response. What is the best way to deal with this?

Arpana Mehta

unread,
Jul 4, 2020, 7:53:53 AM7/4/20
to django...@googlegroups.com
You can use a function which

returns Response({'status': 'SUCCESS'})

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CAP%3DoziQW9yHM74Pyc2bYzik0RJFQua1-qWNuE%2B%2B4OU%2BGoutRZA%40mail.gmail.com.

Ronaldo Mata

unread,
Jul 4, 2020, 8:00:27 AM7/4/20
to django...@googlegroups.com
Thx for your answer. 😁

but this brings me to the second point. If I do that I must to rewrite all method in my API Class Based Views to response with this format. I think that is not the best way to deal with this problem. What do you think?

Julio Cojom

unread,
Jul 4, 2020, 9:35:38 AM7/4/20
to django...@googlegroups.com
How is your model and your serializer?

Ronaldo Mata

unread,
Jul 4, 2020, 10:01:25 AM7/4/20
to django...@googlegroups.com
I think that this not depend of my serializer. I only want that the response data will be inside data variable in the JSON response and i need to add status variable and message to the JSON response. I can to rewrite all Class Based Views of DRF to response with my desired format. but this sound not very good.

I can do this:

def post(self, request, *args, **kwargs):
...........blah...blah
...........return Response({ 'status': true, 'message': 'login success', 'data': {'token':'345rjgjfegjgdsaj,fdgjsafgj'}})

right?

but this required rewrite all DRF methods on Class Based Views to change the response format. 

I'm trying to use Renderers. I think that is the best for this. But I'm not sure how to pass message from views to renderers. it returns me to the same problem.

But this required pass from every view message attribute to data (since all messages depend on the view) example:

{ status: True, message:"user regitered", data: {user: {user detail...., token...}}} (Register View) --> has custom message
{ status: True, message:"logout successfully", data: {} (Logout View) --> has custom message


from rest_framework import status
from rest_framework.renderers import JSONRenderer


class GlobalJSONRenderer(JSONRenderer):

    def render(selfdataaccepted_media_type=Nonerenderer_context=None):
        """
            this function change the response format to return the follow
            format:

            {
                'status': True o False, -> Depend of status code
                'message': '', -> A message (not yet)
                'data': {} -> All Data
            }
        """
        data = {
            'status'False,
            'message''',
            'data': data
        }
        response = renderer_context['response']
        status_code = response.status_code

        if status.is_success(status_code):
            data['status'= True

        return super(GlobalJSONRenderer, self).render(
            data,
            accepted_media_type,
            renderer_context
            )


Ronaldo Mata

unread,
Jul 4, 2020, 10:07:23 AM7/4/20
to django...@googlegroups.com
I Think that this should be a common approach, since many famous frontend framework is easier to create logic to deal with that format response.

Karthik Marudhanayagam

unread,
Jul 4, 2020, 11:05:07 AM7/4/20
to django...@googlegroups.com
Reply all
Reply to author
Forward
0 new messages