web-dev-qa-db-ja.com

APIViewをDjango REST Framework Browsable APIに追加する

RESTバックエンドをDjango REST Framework。
しかし、APIViewインスタンスをWebブラウジング可能なAPIに追加するのに問題があります。

ドキュメント および 前の回答 は、docstringを追加するだけでよいことを示唆しています。
私にとってはうまくいきませんでした。

閲覧可能なAPIは、ビューセットエンドポイントのみがルーターに登録されていることを表示するという前提に基づいています。
その場合、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'),
)

現在、トークンエンドポイントのみが表示されます。

ありがとうございました。

27
Jae

ルーターは通常のビュー用に設計されていません。ルーターにURLを登録する場合は、ViewSetを使用する必要があります。

ここにも同じ質問があります。多分あなたはそれを参照することができます: ルータに単一のビュー(ビューセットではなく)を登録するにはどうすればよいですか?

13
flytofuture

Router.urlsを含む行は、apiで始まる他のURLを「プリエンプト」していると思います。変えてみて、

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

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

それが機能する場合は、includeを使用して行をURLパターンリストの最後の行に移動し、tokenapiapiに戻します。

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)),
)
2
nmgeek