如何禁用django rest框架的管理风格可浏览界面?

如何禁用django rest框架的管理风格可浏览界面?,django,django-rest-framework,Django,Django Rest Framework,我正在使用。它提供了一个很棒的Django管理风格的可浏览自文档API。但是任何人都可以访问这些页面并使用界面添加数据(POST)。如何禁用它?您只需要从视图支持的渲染器列表中删除可浏览的API渲染器 一般情况下: REST_FRAMEWORK = { 'DEFAULT_RENDERER_CLASSES': ( 'rest_framework.renderers.JSONRenderer', ) } class MyView(...): renderer

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

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

一般情况下:

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': (
        'rest_framework.renderers.JSONRenderer',
    )
}
class MyView(...):
    renderer_classes = [renderers.JSONRenderer]
每视图基础:

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': (
        'rest_framework.renderers.JSONRenderer',
    )
}
class MyView(...):
    renderer_classes = [renderers.JSONRenderer]
旁白

在许多情况下,我认为人们在任何情况下都会选择禁用可浏览的API是一件很遗憾的事情,因为这对任何使用API的开发人员都是一个很大的帮助,而且它不会给他们更多的权限。我可以看到,在某些情况下,可能有商业原因,但一般来说,我认为这是一笔巨大的资产。strong>不过,在某些情况下,可能会显示一些非公共API不想公开的细节(如自定义操作的名称)。


有关将可浏览的API呈现程序限制为开发的更多详细信息,请参见。

虽然这个问题的公认答案确实回答了这个问题,但我觉得它并不能解决当前的实际问题

为了完整起见,禁用可浏览HTML api的方法是将其从渲染器类中删除,如下所示:

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': (
        'rest_framework.renderers.JSONRenderer',
    )
}
然而,问题所指的实际问题是人们能够在没有身份验证的情况下发布到API。虽然删除表单会使其不那么明显,但此答案不会保护API端点

至少,有人发现了这个问题,并希望保护API不受未经验证或未经授权的POST提交的影响;他们希望改变现状

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

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticatedOrReadOnly',
    )
}
如果要完全隐藏API,除非用户登录,还可以使用
IsAuthenticated

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

奖金回合

仅在dev中启用可浏览的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
}

只需将其添加到您的设置中即可。py应禁用可浏览的API

是的,用户可以登录并使用API。但是我不想向他们展示管理员风格的可浏览页面。
这对任何使用API的开发人员都是一个很大的帮助。他们不应该有开发和生产的设置文件吗?在开发中启用可浏览的API。@Jacobalenta我认为Tom Christie的意思是,使用您的API的第三方开发人员应该能够使用可浏览的API。是的,根据@DustinWyatt@TomChristie汤姆,在我的例子中,视图级别的权限阻止未经授权的用户在可浏览的api中看到除用户视图之外的任何内容,因为我允许未经授权的帖子创建新用户。这会导致HTML表单显示我不想公开的自动完成数据。除了制作自定义模板之外,有没有一种简单的方法可以防止未经授权的用户这样做?我只是想添加许多或大多数政府客户明确要求完全禁用发现方法(如可浏览的REST API接口)。我不是说这有道理或者说这是正确的。。。就是这样。如果您为本地和生产保留单独的配置文件,您可以将其放在local.py设置文件中(只需确保将上面的元组更改为列表):
REST\u FRAMEWORK['DEFAULT\u RENDERER\u CLASSES'].append('REST\u FRAMEWORK.renders.browsableapirender')
“这还将从HTML可浏览API中删除表单,因为它响应权限”不完全正确。由于表单仍然可见并公开视图名称,因此表单将不存在。视图将存在。该语句为true@user972014不需要该导入语句。