如何禁用django-rest-framework的admin-style可浏览界面?

时间:2012-08-10 08:34:50

标签: django django-rest-framework

我正在使用django-rest-framework。它提供了一个很棒的Django管理风格可浏览的自我文档API。但任何人都可以访问这些页面并使用该界面添加数据(POST)。我该如何禁用它?

4 个答案:

答案 0 :(得分:206)

您只需要从视图支持的渲染器列表中删除可浏览的API渲染器。

你可以这样全球地做到这一点:

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

或者基于每个观点,如此:

class MyView(...):
    renderer_classes = [renderers.JSONRenderer]

除了:在很多情况下,我认为人们会选择在任何情况下都禁用可浏览的API,这是一种耻辱,因为它对任何使用API​​的开发人员都很有帮助,而且它是不会给予他们更多的权限,否则他们将拥有。我可以看到在某些案例中可能存在业务原因,但通常我认为这是一项巨大的资产。

答案 1 :(得分:33)

虽然这个问题的公认答案确实回答了问题,但我觉得它并没有解决手头的实际问题。

为了完成此答案,禁用可浏览的HTML api是通过将其从渲染器类中删除来完成的,如下所示:

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

然而,问题所暗示的实际问题是人们无需身份验证即可发布到API。虽然删除表单不太明显,但这个答案并不能保护API端点。

至少有人发现了这个问题,并希望保护API免受未经身份验证或未经授权的POST提交;正在寻找改变API Permissions

以下内容将所有端点设置为只读,除非用户通过身份验证。

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticatedOrReadOnly',
    )
}

如果您希望完全隐藏API,除非用户已登录,您还可以使用IsAuthenticated

仅供参考:这也将从HTML可浏览API中删除表单,因为它响应权限。当经过身份验证的用户登录时,表单将再次可用。

奖金回合

仅在开发中启用可浏览的HTML API:

DEFAULT_RENDERER_CLASSES = (
    'rest_framework.renderers.JSONRenderer',
)

if DEBUG:
    DEFAULT_RENDERER_CLASSES = DEFAULT_RENDERER_CLASSES + (
        'rest_framework.renderers.BrowsableAPIRenderer',
    )

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticatedOrReadOnly',
    ),
    'DEFAULT_RENDERER_CLASSES': DEFAULT_RENDERER_CLASSES
}

答案 2 :(得分:1)

import rest_framework

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

只需将其添加到您的Settings.py中即可禁用可浏览API!

答案 3 :(得分:0)

删除 来自您设置中'rest_framework.renderers.BrowsableAPIRenderer', 的{​​{1}}