Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Adding a APIView to Django REST Framework Browsable API [duplicate]

I've been developing a REST backend with the Django REST Framework.
However, I'm having trouble adding a APIView instance to the web browsable API.

The documentation and the previous answer suggests that all I have to do is add a docstring.
It did not work for me.

I'm under the assumption that the browsable API only displays Viewset endpoints are registered with the router.
If this is so, how can I register APIView classes to the router?

Below is my current router code:

router = DefaultRouter(trailing_slash=False) router.register(r'tokens', TokenViewSet, base_name='token')     urlpatterns = patterns('',     url(r'^admin/', include(admin.site.urls)),     url(r'^api/', include(router.urls)),     url(r'^api/register$', RegisterUser.as_view(), name='register_user'),     url(r'^api/auth$', ObtainAuthToken.as_view(), name='obtain_token'),     url(r'^api/me$', ObtainProfile.as_view(), name='obtain_profile'),     url(r'^api/recover$', FindUsername.as_view(), name='recover_username'), ) 

Currently, only the Token endpoint shows up.

Thank you.

like image 757
Jae Avatar asked Feb 25 '15 21:02

Jae


2 Answers

Routers aren't designed for normal views. You need use ViewSet if you want register you url to your router.

I have the same question here. Maybe you can ref it: How can I register a single view (not a viewset) on my router?

like image 170
flytofuture Avatar answered Oct 18 '22 08:10

flytofuture


I believe the line that includes the router.urls is 'preempting' other urls starting with api. Try changing,

url(r'^api/', include(router.urls)), 

to

url(r'^tokenapi/', include(router.urls)), 

If that works then try moving the line with include to be the last line in the url patterns list and changing tokenapi back to api.

urlpatterns = patterns('',     url(r'^admin/', include(admin.site.urls)),     url(r'^api/register$', RegisterUser.as_view(), name='register_user'),     url(r'^api/auth$', ObtainAuthToken.as_view(), name='obtain_token'),     url(r'^api/me$', ObtainProfile.as_view(), name='obtain_profile'),     url(r'^api/recover$', FindUsername.as_view(), name='recover_username'),     url(r'^api/', include(router.urls)), ) 
like image 31
nmgeek Avatar answered Oct 18 '22 08:10

nmgeek