隐藏Django rest框架Routers Api视图页面

Ans*_*m17 3 django router django-rest-framework

我在我的Django应用程序中使用DjangoRestFramework 3.3.2进行路由。我有6个应用程序和1个主项目应用程序的6个不同的文件夹。我已经将所有6个应用程序URL都包含到主URL文件中。以下是我的主要网址文件。

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')),
]
Run Code Online (Sandbox Code Playgroud)

这是我的应用网址文件之一。

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
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,当我在浏览器中打开网址时,可以看到整个网址层次结构。这不是必需的。Api根视图快照

如何隐藏这些渲染的视图。我不想显示任何其他信息

我能够使用以下方法隐藏视图:

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': (
        'rest_framework.renderers.JSONRenderer',
    )
}
Run Code Online (Sandbox Code Playgroud)

但我仍然在1个应用程序下获取所有网址。

{"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/"}
Run Code Online (Sandbox Code Playgroud)

Mic*_*rts 7

只是为了更新给出的答案。您确实需要指定SimpleRouter()路由器,但DefaultRouter()路由器通常对于开发过程中的查看和调试很有用。

考虑到这一点,我建议执行以下简单步骤:

if settings.DEBUG:
    router = DefaultRouter()
else:
    router = SimpleRouter()
Run Code Online (Sandbox Code Playgroud)

然后像往常一样:

from myproject.users.api.viewsets import UserViewSet

router.register(r'users', UserViewSet)
Run Code Online (Sandbox Code Playgroud)


Zed*_*Zed 5

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

router = routers.SimpleRouter()
Run Code Online (Sandbox Code Playgroud)

您还应该在生产设置文件中添加以下代码段,以仅为API启用JSONRenderer,这将完全禁用可浏览的Web API。

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': (
        'rest_framework.renderers.JSONRenderer',
    )
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*rin -3

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

  • DEBUG 已设置为“False”。我通过将“DefaultRouter”替换为“SimpleRouter”来修复它。现在它只是给出“404 错误”而不是 Api url 层次结构。 (7认同)