我在 Django 应用程序中使用 DjangoRestFramework 3.3.2 进行路由。我有 6 个不同的文件夹,分别用于 6 个应用程序和 1 个主项目应用程序。我已将所有 6 个应用程序 url 包含到主 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')),
]
这是我的应用程序网址文件之一。
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
现在我的问题是当我在浏览器中打开网址时,我可以看到整个网址层次结构。这不是必需的。
如何隐藏这些渲染视图。我不想显示任何额外的信息
我可以使用以下方法隐藏视图:
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
)
}
但我仍然获得 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/"}
在 urls.py 中将默认路由器更改为简单路由器。
router = routers.SimpleRouter()
您还应该在生产设置文件中添加以下代码片段,以仅为 API 启用 JSONRenderer,这将完全禁用 Web 可浏览的 API。
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
)
}
只是为了更新给出的答案。您确实需要指定
SimpleRouter()
路由器,但通常 DefaultRouter()
路由器对于开发过程中的查看和调试很有用。
考虑到这一点,我建议执行以下简单步骤:
if settings.DEBUG:
router = DefaultRouter()
else:
router = SimpleRouter()
然后照常:
from myproject.users.api.viewsets import UserViewSet
router.register(r'users', UserViewSet)
从
DefaultRouter
创建实例后,您应该将 include_root_view
设置为 False
v1_router = routers.DefaultRouter()
v1_router.include_root_view = False
在 settings.py
DEBUG=False
中,您的 REST API 将不会显示。