2016-02-08 9 views
10

私が持っているbrowsable API閲覧可能なapi_rootでミックスビューとビューセット

私は名前のルートにリンクすることができます api_root
restaurant_router = DefaultRouter() 
restaurant_router.register(r'rooms', RoomsViewSet) 
restaurant_router.register(r'printers', PrintersViewSet) 
restaurant_router.register(r'shifts', ShiftsViewSet) 

urlpatterns = patterns('', 
    url(r'^$', api_root), 
    url(r'^restaurant/$', 
     RestaurantView.as_view(), 
     name='api_restaurants_restaurant'), 
    url(r'^restaurant/', include(restaurant_router.urls)), 
) 

@api_view(('GET',)) 
def api_root(request, format=None): 
    return Response({ 
     'restaurant': reverse('api_restaurants_restaurant', request=request, format=format), 
    }) 

それともによって生成された閲覧可能なAPIを使用することができますDefaultRouter(ドキュメントで説明されています):

私たちも使用しているDefaultRouterクラスGoogleでは ルートビューを自動的に作成するので、 ビューモジュールからapi_rootメソッドを削除できるようになりました。

ViewSetと通常のビューを混在させて、同じAPIルートにすべてを表示するにはどうすればよいですか? DefaultRouterには、制御するViewSetがリストされています。

+1

「ビューセットと通常のビューを混在させる」とはどういう意味ですか?あなたは正確に何をしたいですか? – mariodev

+0

@mariodev:ブラウズ可能なAPIビュー(ブラウズツリーが自動的に生成される)、ビューセットからいくつかのURLが生成され、通常のビューから生成されるURLが必要です。これは、ViewSetsでDefaultRouterを使用しているときに機能しますが、ビュー(ViewSetではなく)から派生したurl_patternsを追加するとすぐに分解されます。 – dangonfast

答えて

-1

DefaultRouterを使用して簡単な方法がないように見える場合は、独自のルータを構築する必要があります。それがどんな慰めであれ、DefaultRouterのAPIRootビューを生成するロジックはかなり簡単で、DefaultRouterクラスに基づいて独自の同様のルータを簡単にロールすることができます(たとえば、ApiRootクラスの実装を変更して追加するURLをフェッチするなど)いくつかの方法例えばルーターのコンストラクタに渡す):

https://github.com/tomchristie/django-rest-framework/blob/86470b7813d891890241149928d4679a3d2c92f6/rest_framework/routers.py#L263

1

あなたが唯一の方法でビューセットとして、あなたのビューを定義することができます。 これをルータに登録すると、ViewSetsで1つのスペースに配置されます。 http://www.django-rest-framework.org/api-guide/viewsets/から

http://www.django-rest-framework.org/api-guide/viewsets/

+0

できます。これの例がありますか? – dangonfast

+0

Django-rest-frameworkで作業する場合は、ソースコードとドキュメントを読む準備が整いました。それは多くの助けになります。あなたのビューコードに依存するので、私はあなたにコードを与えることはできません。上記のリンクで利用可能なサンプルを試してみると、コードを適切に修正することができます。 –

+0

コードはkniteコメントのように見えますが、other_forms_viewのコードはRoomsViewSet.listメソッド内に記述する必要があります。または他の方法 - あなたのビューコードに依存します。 –

-1

Aビューセットのクラスは、)(以下、単に(例えばに.getなどの任意の方法ハンドラを提供していないクラスベースビューのタイプ)又は.postあります

:、代わりに、そのような私たちはあなたのビューセットを拡張することができます意味の.list()と.create()

などのアクションを提供します

+0

Er ...なぜdownvote? – knite

+0

私はdownvoteしませんでしたが、私の質問についてはあなたの例はビューとビューセットを混在させていないためです。私はすでにViewSetsだけでブラウズ可能なAPIを生成する方法を知っています(あなたが正しく指摘したように、実際はガイドにあります)。ビューを追加して自動ブラウズツリーの生成を維持するにはどうすればよいですか? – dangonfast

関連する問題