API Root, router viewsets and traditional views

698 views
Skip to first unread message

Jakub Wiśniowski

unread,
Oct 1, 2013, 7:07:58 AM10/1/13
to django-res...@googlegroups.com
Hi,

   I'd like to have Browsable API root for my API. There are two methods in the DRF docs:

1. use "api root" function like:

@api_view(('GET',))
def api_root(request, format=None):
    return Response({
        'registration': reverse('accounts-register', request=request, format=format),
        'tickets': reverse('ticket-list', request=request, format=format)
    })

2. Use DefaultRouter

router = routers.DefaultRouter()
router.register(r'tickets', TicketViewSet)


However I have some APIViews and some ViewSets in my API. Because I can set up a DefaultRouter for ViewSets, but can't register APIViews with it the api root view generated by router will be incomplete. Am I missing something here or registration of Views with router is just not possible?


At the moment I use something like:

@api_view(('GET',))
def api_root(request, format=None):
    api_root_dict = {}
    
    # parser router
    list_name = router.routes[0].name
    for prefix, viewset, basename in router.registry:
        api_root_dict[prefix] = reverse(list_name.format(basename=basename),
                                        request=request, format=format)
    # add views
    api_root_dict['registration'] = reverse('accounts-register',
                                            request=request, format=format)
    return Response(api_root_dict)

This is placed in the urls.py directly so `router` is the router from 2. above.

Is there any better solution?

Jakub

Dierdre Skye

unread,
Jun 1, 2014, 5:50:31 PM6/1/14
to django-res...@googlegroups.com
Did you ever find any other solutions?

Jakub Wiśniowski

unread,
Jun 2, 2014, 4:18:09 AM6/2/14
to django-res...@googlegroups.com
W dniu niedziela, 1 czerwca 2014 23:50:31 UTC+2 użytkownik Dierdre Skye napisał:
Did you ever find any other solutions?

To be honest.. I don't remember :) But probably not - it wasn't core system feature so IIRC I kept it as described above. It was good enough for my use case.

 
Reply all
Reply to author
Forward
0 new messages