Подтвердить что ты не робот

Добавление API-интерфейса APIView в Django REST Framework Browsable API

Я разрабатывал бэкэнд REST с помощью Django REST Framework.
Тем не менее, у меня возникли проблемы с добавлением экземпляра APIView в API для просмотра веб-страниц.

документация и предыдущий ответ предполагает, что все, что я должен сделать добавляет docstring.
Это не сработало для меня.

Я предполагаю, что API-интерфейс, доступный только для просмотра, отображает конечные точки Viewset, зарегистрированные на маршрутизаторе.
Если это так, как я могу зарегистрировать классы APIView для маршрутизатора?

Ниже мой текущий код маршрутизатора:

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'),
)

В настоящее время отображается только конечная точка токена.

Спасибо.

4b9b3361

Ответ 1

Маршрутизаторы не предназначены для обычных видов. Вам нужно использовать ViewSet, если вы хотите, чтобы вы указали URL-адрес вашего маршрутизатора.

У меня такой же вопрос. Может быть, вы можете это сделать: Как я могу зарегистрировать на моем маршрутизаторе один вид (а не viewet)?

Ответ 2

Я считаю, что строка, которая включает в себя router.urls, "вытесняет" другие URL-адреса, начиная с api. Попробуйте изменить,

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

к

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

Если это работает, попробуйте переместить строку с include, чтобы она была последней строкой в ​​списке шаблонов url и изменила tokenapi на 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)),
)