如何禁用Django的REST的架构的管理风格浏览的界面?(How to disable admin

2019-06-26 22:38发布

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

Answer 1:

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

您可以在全球做到这一点,像这样:

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

或在按次基础,如下所示:

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

旁白 :在许多情况下,我认为这是一个耻辱,人们会选择在任何情况下,禁用浏览的API,因为它是一个很大的援助,以对API的使用任何开发者,它并没有给他们更多的权限,他们原本有 。 我可以看到,有可能是在某些情况下,这样的商业理由,但一般来说,我会认为这是一个巨大的资产。



Answer 2:

虽然接受了这个问题的答案不回答这个问题,因为它是措辞,我觉得它不会在手解决实际问题。

对于这个答案的完整性,禁用浏览的HTML API由从渲染器类,像这样删除它来完成:

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

但是,实际的问题,这个问题暗指是人们能够发布到API无需验证。 在去除形式使得它不太明显,这个答案不保护API端点。

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

下面我们来设置所有端点,除非用户进行身份验证是只读的。

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

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

FYI:这也将从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
}


Answer 3:

import rest_framework

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

只需添加到您的Settings.py应禁用可浏览API!



Answer 4:

删除'rest_framework.renderers.BrowsableAPIRenderer','DEFAULT_RENDERER_CLASSES'在你的设置



文章来源: How to disable admin-style browsable interface of django-rest-framework?