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