2017-03-16 55 views
0

我在Django应用程序中使用DjangoRestFramework 3.3.2进行路由。我有6个不同的文件夹6个应用程序和1个主要项目应用程序。我已将所有6个应用程序网址包含到主网址文件中。以下是我的主要网址文件。隐藏Django休息框架路由器Api视图页面

from django.conf.urls import include, url 
from django.contrib import admin 

urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^vpc/', include('vpc.urls')), 
    url(r'^dss/', include('dss.urls')), 
    url(r'^rds/', include('rds.urls')), 
    url(r'^compute/', include('compute.urls')), 
    url(r'^iam/', include('iam.urls')), 
] 

这是我的一个应用程序url文件。

from django.conf.urls import url 
from rest_framework import routers 
import views.instance_views as instance 
import views.snapshot_views as snapshot 

router = routers.SimpleRouter() 
router.register(r'instance', instance.IntanceViewSet, base_name='instance') 
router.register(r'snapshot', snapshot.SnapshotViewSet, base_name='snapshot') 

urlpatterns = [] 

urlpatterns += router.urls 

现在我的问题是,当我在浏览器中打开网址时,我可以看到整个网址层次结构。这不是必需的。 Snapshot of Api root view

如何隐藏这些呈现的视图。我不想表现出任何额外的信息

我可以使用隐藏的看法:

REST_FRAMEWORK = { 
    'DEFAULT_RENDERER_CLASSES': (
     'rest_framework.renderers.JSONRenderer', 
    ) 
} 

但我仍然得到下1个应用程式的所有URL。

{"instance":"http://127.0.0.1:8000/compute/instance/","keypair":"http://127.0.0.1:8000/compute/keypair/","volume":"http://127.0.0.1:8000/compute/volume/","image":"http://127.0.0.1:8000/compute/image/","snapshot":"http://127.0.0.1:8000/compute/snapshot/"} 
+0

在设置中没有看到这件事,但你可以尝试用url'compute/$'添加一个视图(注意$)返回例如401,它应该留下更深的URL路由器原样。 –

回答

0

在settings.py DEBUG=False和您的REST API不会显示。

+3

DEBUG已被设置为'False'。我通过用'SimpleRouter'取代'DefaultRouter'来修复它。现在它只是给出'404错误'而不是Api url层次结构。 – Anshum17

1

在您的urls.py中将默认路由器更改为简单路由器。

router = routers.SimpleRouter() 

你也应该在制作设置文件中添加下面的代码片段,仅能够JSONRenderer的API,这将完全禁用网络浏览的API。

REST_FRAMEWORK = { 
    'DEFAULT_RENDERER_CLASSES': (
     'rest_framework.renderers.JSONRenderer', 
    ) 
}