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



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

237   4  

4 ответов:

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

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

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: это также удалит форму из просматриваемого API HTML, поскольку она реагирует на разрешения. Когда аутентифицированный пользователь войдет в систему, форма будет доступна снова.

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

только включить просматриваемый 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' в настройках

    Ничего не найдено.

Добавить ответ:
Отменить.