Как отключить интерфейс Django-rest-framework в стиле администратора?

Я использую django-rest-framework. Он обеспечивает удивительный стиль администратора Django, просматриваемый самостоятельно документирующий API. Но любой может посетить эти страницы и использовать интерфейс для добавления данных (POST). Как его отключить?

4 ответов


вам просто нужно удалить визуализатор API browsable из списка поддерживаемых визуализаторов для представления.

вы можете сделать это глобально так:

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

или на основе каждого вида, например:

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

в сторону: во многих случаях я думаю, что это позор, что люди решили бы отключить просматриваемый API в любом случае, так как это большая помощь для любых разработчиков, работающих над API, и это не дает им больше прав, что они будут иначе придется. Я вижу, что могут быть деловые причины для этого в некоторые случаев, но в целом я бы счел это огромным преимуществом.


хотя принятый ответ на этот вопрос действительно отвечает на вопрос, как он был сформулирован, я чувствую, что он не решает фактическую проблему.

для полноты в этом ответе отключение просматриваемого HTML api выполняется путем удаления его из классов визуализации следующим образом:

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': (
        'rest_framework.renderers.JSONRenderer',
    )
}
, актуальная тема вопроса намекает на людей, которые к API без авторизации. Хотя удаление формы делает его менее очевидным, этот ответ не защищает конечные точки API.

как минимум, кто-то находит этот вопрос и хочет защитить API от несанкционированных или несанкционированных сообщений; они хотят изменить разрешения API

ниже будет установлено, что все конечные точки должны быть прочитаны только, если пользователь не аутентифицирован.

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

если вы хотите полностью скрыть API, если пользователь не вошел в систему, вы также можете использовать IsAuthenticated.

FYI: это также удалит форму из HTML browseable API, поскольку она отвечает на разрешения. Когда аутентифицированный пользователь входит в систему, форма будет доступна снова.

Бонусный Раунд:

включить только просматриваемый HTML API в dev:

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
}

import rest_framework

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

просто добавьте это в свой Settings.py следует отключить API для просмотра!


удалить 'rest_framework.renderers.BrowsableAPIRenderer', с 'DEFAULT_RENDERER_CLASSES' в настройках